I MariaDB, BENCHMARK()
är en inbyggd funktion som exekverar ett uttryck ett visst antal gånger.
Den kan användas för att tajma hur snabbt MariaDB bearbetar uttrycket.
Resultatet är alltid 0
. Funktionen är avsedd att användas inom kommandoradsverktyget mysql, som rapporterar körningstider för frågor.
Syntax
Syntaxen ser ut så här:
BENCHMARK(count,expr)
Där count
är antalet gånger du vill ha expr
att springa.
Exempel 1
Här är ett exempel att visa:
SELECT BENCHMARK(2, SLEEP(2));
Resultat:
+------------------------+ | BENCHMARK(2, SLEEP(2)) | +------------------------+ | 0 | +------------------------+ 1 row in set (4.015 sec)
Som förväntat, 0
återlämnades. Men det vi är intresserade av är söktiden.
Här använde jag SLEEP()
funktion för att sova i 2 sekunder. Att använda den här funktionen i sig skulle normalt göra att uttalandet tar cirka 2 sekunder att köra.
Men i det här fallet klarade jag 2
som det första argumentet till BENCHMARK()
. Det orsakade SLEEP()
funktionen körs två gånger, vilket orsakar BENCHMARK()
funktionen tar cirka 4 sekunder att köra (4,015 sekunder för att vara exakt).
Här är vad som händer om vi ökar det första argumentet till 3
:
SELECT BENCHMARK(3, SLEEP(2));
Resultat:
+------------------------+ | BENCHMARK(3, SLEEP(2)) | +------------------------+ | 0 | +------------------------+ 1 row in set (6.012 sec)
Den här gången SLEEP()
funktionen kördes tre gånger, och så BENCHMARK()
tog drygt 6 sekunder att köra.
Exempel 2
Här är ett exempel som använder ENCODE()
funktion för att koda en sträng (första argument) med ett lösenord (andra argument):
SELECT BENCHMARK(100000, ENCODE('Homer', 'Symptom'));
Resultat:
+-----------------------------------------------+ | BENCHMARK(100000, ENCODE('Homer', 'Symptom')) | +-----------------------------------------------+ | 0 | +-----------------------------------------------+ 1 row in set (0.016 sec)
Vi kan se att operationen tog 0,016 sekunder att slutföra.
Låt oss öka det första argumentet från 100 000 till 1 000 000 och se hur det påverkar körningstiden.
SELECT BENCHMARK(1000000, ENCODE('Homer', 'Symptom'));
Resultat:
+------------------------------------------------+ | BENCHMARK(1000000, ENCODE('Homer', 'Symptom')) | +------------------------------------------------+ | 0 | +------------------------------------------------+ 1 row in set (0.118 sec)
Den här gången tog det mycket längre tid att köra.
Nollargument
Om det första argumentet är null
, sedan null
returneras:
SELECT BENCHMARK(null, ENCODE('Homer', 'Symptom'));
Resultat:
+---------------------------------------------+ | BENCHMARK(null, ENCODE('Homer', 'Symptom')) | +---------------------------------------------+ | NULL | +---------------------------------------------+ 1 row in set (0.007 sec)
Men om bara det andra argumentet är null
, sedan 0
returneras:
SELECT BENCHMARK(100000, null);
Resultat:
+-------------------------+ | BENCHMARK(100000, null) | +-------------------------+ | 0 | +-------------------------+ 1 row in set (0.002 sec)
Ogiltigt antal argument
Anropar BENCHMARK()
utan argument, eller med fel antal argument, resulterar i ett fel:
SELECT BENCHMARK();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'
Och:
SELECT BENCHMARK(1, 2, 3);
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'