En MariaDB, BENCHMARK()
es una función integrada que ejecuta una expresión un número específico de veces.
Se puede utilizar para cronometrar la rapidez con que MariaDB procesa la expresión.
El resultado siempre es 0
. La función está diseñada para usarse dentro de la herramienta de línea de comandos mysql, que informa los tiempos de ejecución de las consultas.
Sintaxis
La sintaxis es así:
BENCHMARK(count,expr)
Donde count
es el número de veces que desea expr
para correr.
Ejemplo 1
Aquí hay un ejemplo para demostrarlo:
SELECT BENCHMARK(2, SLEEP(2));
Resultado:
+------------------------+ | BENCHMARK(2, SLEEP(2)) | +------------------------+ | 0 | +------------------------+ 1 row in set (4.015 sec)
Como era de esperar, 0
fue devuelto Sin embargo, lo que nos interesa es el tiempo de ejecución de la consulta.
Aquí usé SLEEP()
Función para dormir durante 2 segundos. El uso de esta función por sí sola normalmente haría que la declaración tardara alrededor de 2 segundos en ejecutarse.
Sin embargo, en este caso pasé 2
como primer argumento de BENCHMARK()
. Eso causó el SLEEP()
función para ejecutar dos veces, lo que hace que BENCHMARK()
la función tarda unos 4 segundos en ejecutarse (4,015 segundos para ser precisos).
Esto es lo que sucede si aumentamos el primer argumento a 3
:
SELECT BENCHMARK(3, SLEEP(2));
Resultado:
+------------------------+ | BENCHMARK(3, SLEEP(2)) | +------------------------+ | 0 | +------------------------+ 1 row in set (6.012 sec)
Esta vez el SLEEP()
La función se ejecutó tres veces, por lo que BENCHMARK()
tardó poco más de 6 segundos en ejecutarse.
Ejemplo 2
Aquí hay un ejemplo que usa ENCODE()
función para codificar una cadena (primer argumento) con una contraseña (segundo argumento):
SELECT BENCHMARK(100000, ENCODE('Homer', 'Symptom'));
Resultado:
+-----------------------------------------------+ | BENCHMARK(100000, ENCODE('Homer', 'Symptom')) | +-----------------------------------------------+ | 0 | +-----------------------------------------------+ 1 row in set (0.016 sec)
Podemos ver que la operación tardó 0,016 segundos en completarse.
Aumentemos el primer argumento de 100 000 a 1 000 000 y veamos cómo afecta eso al tiempo de ejecución.
SELECT BENCHMARK(1000000, ENCODE('Homer', 'Symptom'));
Resultado:
+------------------------------------------------+ | BENCHMARK(1000000, ENCODE('Homer', 'Symptom')) | +------------------------------------------------+ | 0 | +------------------------------------------------+ 1 row in set (0.118 sec)
Esta vez tardó mucho más en ejecutarse.
Argumento nulo
Si el primer argumento es null
, luego null
se devuelve:
SELECT BENCHMARK(null, ENCODE('Homer', 'Symptom'));
Resultado:
+---------------------------------------------+ | BENCHMARK(null, ENCODE('Homer', 'Symptom')) | +---------------------------------------------+ | NULL | +---------------------------------------------+ 1 row in set (0.007 sec)
Pero si solo el segundo argumento es null
, luego 0
se devuelve:
SELECT BENCHMARK(100000, null);
Resultado:
+-------------------------+ | BENCHMARK(100000, null) | +-------------------------+ | 0 | +-------------------------+ 1 row in set (0.002 sec)
Número de argumentos no válido
Llamando a BENCHMARK()
sin argumentos, o con el número incorrecto de argumentos, da como resultado un error:
SELECT BENCHMARK();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'
Y:
SELECT BENCHMARK(1, 2, 3);
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'