W MariaDB, BENCHMARK()
to wbudowana funkcja, która wykonuje wyrażenie określoną liczbę razy.
Może być używany do określania czasu, jak szybko MariaDB przetwarza wyrażenie.
Wynik to zawsze 0
. Funkcja jest przeznaczona do użycia w narzędziu wiersza poleceń mysql, które raportuje czasy wykonania zapytań.
Składnia
Składnia wygląda tak:
BENCHMARK(count,expr)
Gdzie count
to ile razy chcesz expr
do uruchomienia.
Przykład 1
Oto przykład do zademonstrowania:
SELECT BENCHMARK(2, SLEEP(2));
Wynik:
+------------------------+ | BENCHMARK(2, SLEEP(2)) | +------------------------+ | 0 | +------------------------+ 1 row in set (4.015 sec)
Zgodnie z oczekiwaniami 0
Został zwrócony. Jednak to, co nas interesuje, to czas wykonania zapytania.
Tutaj użyłem SLEEP()
funkcja spania przez 2 sekundy. Użycie tej funkcji samo w sobie normalnie powodowałoby, że wykonanie instrukcji zajęłoby około 2 sekund.
Jednak w tym przypadku zdałem 2
jako pierwszy argument BENCHMARK()
. To spowodowało SLEEP()
funkcja zostanie wykonana dwukrotnie, powodując BENCHMARK()
wykonanie tej funkcji zajmie około 4 sekund (dokładnie 4.015 sekund).
Oto, co się stanie, jeśli zwiększymy pierwszy argument do 3
:
SELECT BENCHMARK(3, SLEEP(2));
Wynik:
+------------------------+ | BENCHMARK(3, SLEEP(2)) | +------------------------+ | 0 | +------------------------+ 1 row in set (6.012 sec)
Tym razem SLEEP()
funkcja została wykonana trzy razy, więc BENCHMARK()
wykonanie zajęło nieco ponad 6 sekund.
Przykład 2
Oto przykład, który używa ENCODE()
funkcja do kodowania ciągu znaków (pierwszy argument) z hasłem (drugi argument):
SELECT BENCHMARK(100000, ENCODE('Homer', 'Symptom'));
Wynik:
+-----------------------------------------------+ | BENCHMARK(100000, ENCODE('Homer', 'Symptom')) | +-----------------------------------------------+ | 0 | +-----------------------------------------------+ 1 row in set (0.016 sec)
Widzimy, że operacja trwała 0,016 sekundy.
Zwiększmy pierwszy argument ze 100 000 do 1 000 000 i zobaczmy, jak wpływa to na czas wykonania.
SELECT BENCHMARK(1000000, ENCODE('Homer', 'Symptom'));
Wynik:
+------------------------------------------------+ | BENCHMARK(1000000, ENCODE('Homer', 'Symptom')) | +------------------------------------------------+ | 0 | +------------------------------------------------+ 1 row in set (0.118 sec)
Tym razem uruchomienie trwało znacznie dłużej.
Argument zerowy
Jeśli pierwszym argumentem jest null
, a następnie null
jest zwracany:
SELECT BENCHMARK(null, ENCODE('Homer', 'Symptom'));
Wynik:
+---------------------------------------------+ | BENCHMARK(null, ENCODE('Homer', 'Symptom')) | +---------------------------------------------+ | NULL | +---------------------------------------------+ 1 row in set (0.007 sec)
Ale jeśli tylko drugi argument to null
, a następnie 0
jest zwracany:
SELECT BENCHMARK(100000, null);
Wynik:
+-------------------------+ | BENCHMARK(100000, null) | +-------------------------+ | 0 | +-------------------------+ 1 row in set (0.002 sec)
Nieprawidłowa liczba argumentów
Wywołanie BENCHMARK()
bez argumentów lub z niewłaściwą liczbą argumentów powoduje błąd:
SELECT BENCHMARK();
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'
Oraz:
SELECT BENCHMARK(1, 2, 3);
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'