In MariaDB, BENCHMARK()
è una funzione incorporata che esegue un'espressione un numero di volte specificato.
Può essere utilizzato per calcolare la velocità con cui MariaDB elabora l'espressione.
Il risultato è sempre 0
. La funzione deve essere utilizzata all'interno dello strumento da riga di comando mysql, che riporta i tempi di esecuzione delle query.
Sintassi
La sintassi è questa:
BENCHMARK(count,expr)
Dove count
è il numero di volte che vuoi expr
per correre.
Esempio 1
Ecco un esempio da dimostrare:
SELECT BENCHMARK(2, SLEEP(2));
Risultato:
+------------------------+ | BENCHMARK(2, SLEEP(2)) | +------------------------+ | 0 | +------------------------+ 1 row in set (4.015 sec)
Come previsto, 0
è stato restituito. Tuttavia, ciò che ci interessa è il tempo di esecuzione della query.
Qui ho usato SLEEP()
funzione per dormire per 2 secondi. L'utilizzo di questa funzione da sola normalmente fa sì che l'istruzione richieda circa 2 secondi per l'esecuzione.
Tuttavia, in questo caso ho passato 2
come primo argomento per BENCHMARK()
. Ciò ha causato il SLEEP()
funzione da eseguire due volte, causando il BENCHMARK()
funzione per l'esecuzione di circa 4 secondi (4.015 secondi per la precisione).
Ecco cosa succede se aumentiamo il primo argomento a 3
:
SELECT BENCHMARK(3, SLEEP(2));
Risultato:
+------------------------+ | BENCHMARK(3, SLEEP(2)) | +------------------------+ | 0 | +------------------------+ 1 row in set (6.012 sec)
Questa volta il SLEEP()
la funzione è stata eseguita tre volte, quindi BENCHMARK()
ci sono voluti poco più di 6 secondi per l'esecuzione.
Esempio 2
Ecco un esempio che utilizza ENCODE()
funzione per codificare una stringa (primo argomento) con una password (secondo argomento):
SELECT BENCHMARK(100000, ENCODE('Homer', 'Symptom'));
Risultato:
+-----------------------------------------------+ | BENCHMARK(100000, ENCODE('Homer', 'Symptom')) | +-----------------------------------------------+ | 0 | +-----------------------------------------------+ 1 row in set (0.016 sec)
Possiamo vedere che l'operazione ha richiesto 0,016 secondi per essere completata.
Aumentiamo il primo argomento da 100.000 a 1.000.000 e vediamo come ciò influisce sul tempo di esecuzione.
SELECT BENCHMARK(1000000, ENCODE('Homer', 'Symptom'));
Risultato:
+------------------------------------------------+ | BENCHMARK(1000000, ENCODE('Homer', 'Symptom')) | +------------------------------------------------+ | 0 | +------------------------------------------------+ 1 row in set (0.118 sec)
Questa volta ci è voluto molto più tempo per l'esecuzione.
Argomento nullo
Se il primo argomento è null
, quindi null
viene restituito:
SELECT BENCHMARK(null, ENCODE('Homer', 'Symptom'));
Risultato:
+---------------------------------------------+ | BENCHMARK(null, ENCODE('Homer', 'Symptom')) | +---------------------------------------------+ | NULL | +---------------------------------------------+ 1 row in set (0.007 sec)
Ma se solo il secondo argomento è null
, quindi 0
viene restituito:
SELECT BENCHMARK(100000, null);
Risultato:
+-------------------------+ | BENCHMARK(100000, null) | +-------------------------+ | 0 | +-------------------------+ 1 row in set (0.002 sec)
Numero di argomenti non valido
Chiamando BENCHMARK()
senza argomenti, o con il numero errato di argomenti, genera un errore:
SELECT BENCHMARK();
Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'
E:
SELECT BENCHMARK(1, 2, 3);
Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'