В MariaDB, BENCHMARK()
е вградена функция, която изпълнява израз определен брой пъти.
Може да се използва за измерване на времето колко бързо MariaDB обработва израза.
Резултатът винаги е 0
. Функцията е предназначена да се използва в инструмента на командния ред на mysql, който отчита времената за изпълнение на заявката.
Синтаксис
Синтаксисът е така:
BENCHMARK(count,expr)
Където count
е колко пъти искате expr
да тичам.
Пример 1
Ето пример за демонстрация:
SELECT BENCHMARK(2, SLEEP(2));
Резултат:
+------------------------+ | BENCHMARK(2, SLEEP(2)) | +------------------------+ | 0 | +------------------------+ 1 row in set (4.015 sec)
Както се очакваше, 0
беше върнат. Въпреки това, това, което ни интересува, е времето за изпълнение на заявката.
Тук използвах SLEEP()
функция за заспиване за 2 секунди. Използването на тази функция самостоятелно би накарало изпълнението на оператора да отнеме около 2 секунди.
В този случай обаче минах 2
като първи аргумент на BENCHMARK()
. Това причини SLEEP()
функция да се изпълни два пъти, причинявайки BENCHMARK()
функция, за да отнеме около 4 секунди за изпълнение (4,015 секунди за да бъдем точни).
Ето какво се случва, ако увеличим първия аргумент до 3
:
SELECT BENCHMARK(3, SLEEP(2));
Резултат:
+------------------------+ | BENCHMARK(3, SLEEP(2)) | +------------------------+ | 0 | +------------------------+ 1 row in set (6.012 sec)
Този път SLEEP()
функцията беше изпълнена три пъти и така BENCHMARK()
отне малко повече от 6 секунди за изпълнение.
Пример 2
Ето пример, който използва ENCODE()
функция за кодиране на низ (първи аргумент) с парола (втори аргумент):
SELECT BENCHMARK(100000, ENCODE('Homer', 'Symptom'));
Резултат:
+-----------------------------------------------+ | BENCHMARK(100000, ENCODE('Homer', 'Symptom')) | +-----------------------------------------------+ | 0 | +-----------------------------------------------+ 1 row in set (0.016 sec)
Виждаме, че операцията отне 0,016 секунди, за да завърши.
Нека увеличим първия аргумент от 100 000 на 1 000 000 и да видим как това се отразява на времето за изпълнение.
SELECT BENCHMARK(1000000, ENCODE('Homer', 'Symptom'));
Резултат:
+------------------------------------------------+ | BENCHMARK(1000000, ENCODE('Homer', 'Symptom')) | +------------------------------------------------+ | 0 | +------------------------------------------------+ 1 row in set (0.118 sec)
Този път стартирането отне много повече време.
Нулев аргумент
Ако първият аргумент е null
, след това null
се връща:
SELECT BENCHMARK(null, ENCODE('Homer', 'Symptom'));
Резултат:
+---------------------------------------------+ | BENCHMARK(null, ENCODE('Homer', 'Symptom')) | +---------------------------------------------+ | NULL | +---------------------------------------------+ 1 row in set (0.007 sec)
Но ако само вторият аргумент е null
, след това 0
се връща:
SELECT BENCHMARK(100000, null);
Резултат:
+-------------------------+ | BENCHMARK(100000, null) | +-------------------------+ | 0 | +-------------------------+ 1 row in set (0.002 sec)
Невалиден брой аргументи
Извикване на BENCHMARK()
без аргументи или с грешен брой аргументи, води до грешка:
SELECT BENCHMARK();
Резултат:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'
И:
SELECT BENCHMARK(1, 2, 3);
Резултат:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'