I MariaDB, BENCHMARK()
er en indbygget funktion, der udfører et udtryk et bestemt antal gange.
Det kan bruges til at time, hvor hurtigt MariaDB behandler udtrykket.
Resultatet er altid 0
. Funktionen er beregnet til at blive brugt i mysql-kommandolinjeværktøjet, som rapporterer forespørgselsudførelsestider.
Syntaks
Syntaksen ser sådan ud:
BENCHMARK(count,expr)
Hvor count
er det antal gange, du vil have expr
at løbe.
Eksempel 1
Her er et eksempel til demonstration:
SELECT BENCHMARK(2, SLEEP(2));
Resultat:
+------------------------+ | BENCHMARK(2, SLEEP(2)) | +------------------------+ | 0 | +------------------------+ 1 row in set (4.015 sec)
Som forventet, 0
blev returneret. Det, vi dog er interesseret i, er forespørgselsudførelsestiden.
Her brugte jeg SLEEP()
funktion til at sove i 2 sekunder. Brug af denne funktion i sig selv vil normalt få sætningen til at tage omkring 2 sekunder at udføre.
Men i dette tilfælde bestod jeg 2
som det første argument til BENCHMARK()
. Det forårsagede SLEEP()
funktion til at udføre to gange, hvilket forårsager BENCHMARK()
funktionen tager omkring 4 sekunder at udføre (4,015 sekunder for at være præcis).
Her er, hvad der sker, hvis vi øger det første argument til 3
:
SELECT BENCHMARK(3, SLEEP(2));
Resultat:
+------------------------+ | BENCHMARK(3, SLEEP(2)) | +------------------------+ | 0 | +------------------------+ 1 row in set (6.012 sec)
Denne gang SLEEP()
funktion blev udført tre gange, og så BENCHMARK()
tog lidt over 6 sekunder at udføre.
Eksempel 2
Her er et eksempel, der bruger ENCODE()
funktion til at kode en streng (første argument) med en adgangskode (andet argument):
SELECT BENCHMARK(100000, ENCODE('Homer', 'Symptom'));
Resultat:
+-----------------------------------------------+ | BENCHMARK(100000, ENCODE('Homer', 'Symptom')) | +-----------------------------------------------+ | 0 | +-----------------------------------------------+ 1 row in set (0.016 sec)
Vi kan se, at operationen tog 0,016 sekunder at fuldføre.
Lad os øge det første argument fra 100.000 til 1.000.000 og se, hvordan det påvirker udførelsestiden.
SELECT BENCHMARK(1000000, ENCODE('Homer', 'Symptom'));
Resultat:
+------------------------------------------------+ | BENCHMARK(1000000, ENCODE('Homer', 'Symptom')) | +------------------------------------------------+ | 0 | +------------------------------------------------+ 1 row in set (0.118 sec)
Denne gang tog det meget længere tid at køre.
Nul-argument
Hvis det første argument er null
, derefter null
returneres:
SELECT BENCHMARK(null, ENCODE('Homer', 'Symptom'));
Resultat:
+---------------------------------------------+ | BENCHMARK(null, ENCODE('Homer', 'Symptom')) | +---------------------------------------------+ | NULL | +---------------------------------------------+ 1 row in set (0.007 sec)
Men hvis kun det andet argument er null
, derefter 0
returneres:
SELECT BENCHMARK(100000, null);
Resultat:
+-------------------------+ | BENCHMARK(100000, null) | +-------------------------+ | 0 | +-------------------------+ 1 row in set (0.002 sec)
Ugyldigt antal argumenter
Kalder BENCHMARK()
uden argumenter, eller med det forkerte antal argumenter, resulterer det i en fejl:
SELECT BENCHMARK();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'
Og:
SELECT BENCHMARK(1, 2, 3);
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'