sql >> Base de Datos >  >> RDS >> MariaDB

MariaDB BENCHMARK() explicado

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'