MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

MariaDB BENCHMARK() Explicado


No MariaDB, BENCHMARK() é uma função interna que executa uma expressão um número especificado de vezes.

Ele pode ser usado para cronometrar a rapidez com que o MariaDB processa a expressão.

O resultado é sempre 0 . A função deve ser usada na ferramenta de linha de comando mysql, que informa os tempos de execução da consulta.

Sintaxe


A sintaxe fica assim:
BENCHMARK(count,expr)

Onde count é o número de vezes que você deseja expr para correr.

Exemplo 1


Segue um exemplo para demonstrar:
SELECT BENCHMARK(2, SLEEP(2));

Resultado:
+------------------------+
| BENCHMARK(2, SLEEP(2)) |
+------------------------+
|                      0 |
+------------------------+
1 row in set (4.015 sec)

Como esperado, 0 foi devolvido. No entanto, o que nos interessa é o tempo de execução da consulta.

Aqui eu usei o SLEEP() função para dormir por 2 segundos. Usar essa função por si só normalmente faria com que a instrução levasse cerca de 2 segundos para ser executada.

No entanto, neste caso eu passei 2 como o primeiro argumento para BENCHMARK() . Isso fez com que o SLEEP() função para executar duas vezes, fazendo com que o BENCHMARK() função para levar cerca de 4 segundos para executar (4,015 segundos para ser preciso).

Veja o que acontece se aumentarmos o primeiro argumento para 3 :
SELECT BENCHMARK(3, SLEEP(2));

Resultado:
+------------------------+
| BENCHMARK(3, SLEEP(2)) |
+------------------------+
|                      0 |
+------------------------+
1 row in set (6.012 sec)

Desta vez, o SLEEP() função foi executada três vezes, então BENCHMARK() levou pouco mais de 6 segundos para ser executado.

Exemplo 2


Aqui está um exemplo que usa o ENCODE() função para codificar uma string (primeiro argumento) com uma senha (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 a operação levou 0,016 segundos para ser concluída.

Vamos aumentar o primeiro argumento de 100.000 para 1.000.000 e ver como isso afeta o tempo de execução.
SELECT BENCHMARK(1000000, ENCODE('Homer', 'Symptom'));

Resultado:
+------------------------------------------------+
| BENCHMARK(1000000, ENCODE('Homer', 'Symptom')) |
+------------------------------------------------+
|                                              0 |
+------------------------------------------------+
1 row in set (0.118 sec)

Desta vez demorou muito mais para correr.

Argumento nulo


Se o primeiro argumento for null , então null é retornado:
SELECT BENCHMARK(null, ENCODE('Homer', 'Symptom'));

Resultado:
+---------------------------------------------+
| BENCHMARK(null, ENCODE('Homer', 'Symptom')) |
+---------------------------------------------+
|                                        NULL |
+---------------------------------------------+
1 row in set (0.007 sec)

Mas se apenas o segundo argumento for null , então 0 é retornado:
SELECT BENCHMARK(100000, null);

Resultado:
+-------------------------+
| BENCHMARK(100000, null) |
+-------------------------+
|                       0 |
+-------------------------+
1 row in set (0.002 sec)

Número inválido de argumentos


Chamando BENCHMARK() sem argumentos, ou com o número errado de argumentos, resulta em um erro:
SELECT BENCHMARK();

Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'

E:
SELECT BENCHMARK(1, 2, 3);

Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'