MariaDB
 sql >> Database >  >> RDS >> MariaDB

Spiegazione di MariaDB BENCHMARK()

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'