V MariaDB, BENCHMARK()
je vestavěná funkce, která provádí výraz zadaný počet opakování.
Lze jej použít k měření rychlosti zpracování výrazu MariaDB.
Výsledek je vždy 0
. Tato funkce je určena k použití v rámci nástroje příkazového řádku mysql, který hlásí časy provádění dotazu.
Syntaxe
Syntaxe vypadá takto:
BENCHMARK(count,expr)
Kde count
je počet, kolikrát chcete expr
spustit.
Příklad 1
Zde je příklad k demonstraci:
SELECT BENCHMARK(2, SLEEP(2));
Výsledek:
+------------------------+ | BENCHMARK(2, SLEEP(2)) | +------------------------+ | 0 | +------------------------+ 1 row in set (4.015 sec)
Podle očekávání 0
byl vrácen. Co nás však zajímá, je doba provádění dotazu.
Zde jsem použil SLEEP()
funkce uspání na 2 sekundy. Samotné použití této funkce by normálně způsobilo, že provedení příkazu trvalo přibližně 2 sekundy.
V tomto případě jsem však prošel 2
jako první argument pro BENCHMARK()
. To způsobilo SLEEP()
funkce se spustí dvakrát, což způsobí BENCHMARK()
provedení funkce trvá přibližně 4 sekundy (přesněji 4,015 sekundy).
Zde je to, co se stane, když zvýšíme první argument na 3
:
SELECT BENCHMARK(3, SLEEP(2));
Výsledek:
+------------------------+ | BENCHMARK(3, SLEEP(2)) | +------------------------+ | 0 | +------------------------+ 1 row in set (6.012 sec)
Tentokrát SLEEP()
funkce byla provedena třikrát, a tak BENCHMARK()
spuštění trvalo něco málo přes 6 sekund.
Příklad 2
Zde je příklad, který používá ENCODE()
funkce pro kódování řetězce (první argument) heslem (druhý argument):
SELECT BENCHMARK(100000, ENCODE('Homer', 'Symptom'));
Výsledek:
+-----------------------------------------------+ | BENCHMARK(100000, ENCODE('Homer', 'Symptom')) | +-----------------------------------------------+ | 0 | +-----------------------------------------------+ 1 row in set (0.016 sec)
Vidíme, že dokončení operace trvalo 0,016 sekundy.
Zvětšeme první argument ze 100 000 na 1 000 000 a uvidíme, jak to ovlivní dobu provedení.
SELECT BENCHMARK(1000000, ENCODE('Homer', 'Symptom'));
Výsledek:
+------------------------------------------------+ | BENCHMARK(1000000, ENCODE('Homer', 'Symptom')) | +------------------------------------------------+ | 0 | +------------------------------------------------+ 1 row in set (0.118 sec)
Tentokrát to trvalo mnohem déle.
Nulový argument
Pokud je první argument null
a poté null
je vráceno:
SELECT BENCHMARK(null, ENCODE('Homer', 'Symptom'));
Výsledek:
+---------------------------------------------+ | BENCHMARK(null, ENCODE('Homer', 'Symptom')) | +---------------------------------------------+ | NULL | +---------------------------------------------+ 1 row in set (0.007 sec)
Ale pokud je pouze druhý argument null
a poté 0
je vráceno:
SELECT BENCHMARK(100000, null);
Výsledek:
+-------------------------+ | BENCHMARK(100000, null) | +-------------------------+ | 0 | +-------------------------+ 1 row in set (0.002 sec)
Neplatný počet argumentů
Volání BENCHMARK()
bez argumentů nebo s nesprávným počtem argumentů vede k chybě:
SELECT BENCHMARK();
Výsledek:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'
A:
SELECT BENCHMARK(1, 2, 3);
Výsledek:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'