BENCHMARK() în MySQL

Execută o expresie de un număr de ori, ca să măsori cât de repede o calculează serverul.

Sintaxă
BENCHMARK(numar, expresie)

Ce face BENCHMARK()

BENCHMARK() calculează expresia de numar ori și returnează mereu 0. Rezultatul care contează este timpul afișat de clientul mysql după interogare (de exemplu 1 row in set (0.43 sec)).

Expresia trebuie să fie scalară: o valoare, nu un tabel. Timpul măsoară doar calculul expresiei, fără analiza interogării sau transferul prin rețea. Rulează testul de câteva ori, pentru că rezultatul depinde de cât de ocupat este serverul.

Parametri

Parametru Descriere
numar De câte ori se calculează expresia.
expresie Expresia testată.

Ce returnează

0, sau NULL pentru argumente greșite (de exemplu un număr negativ).

Exemple

Exemplul 1: Rezultatul este mereu 0

SELECT BENCHMARK(100000, SHA2('dexblog', 256)) AS rezultat;

Rezultat

+----------+
| rezultat |
+----------+
|        0 |
+----------+

Exemplul 2: Timpul, în clientul mysql

Am folosit RAND() în expresie, ca serverul să o calculeze de fiecare dată.

SELECT BENCHMARK(1000000, SHA2(RAND(), 256));

Rezultat în clientul mysql (timpul diferă)

+---------------------------------------+
| BENCHMARK(1000000, SHA2(RAND(), 256)) |
+---------------------------------------+
|                                     0 |
+---------------------------------------+
1 row in set (0.43 sec)

Greșeli frecvente

  • Folosești BENCHMARK() ca să compari interogări întregi. Funcția măsoară doar o expresie; pentru interogări folosește EXPLAIN ANALYZE.
  • Testezi o expresie constantă. Serverul poate calcula o singură dată o expresie care nu se schimbă, iar timpul iese nerealist de mic.

Comenzi înrudite

  • SLEEP(): Oprește execuția interogării pentru un număr de secunde (poate avea zecimale), apoi returnează 0.
  • FORMAT_PICO_TIME(): Transformă un timp în picosecunde într-un text ușor de citit: 3.50 ns, 250.00 ms, 3.15 min.
  • SHA2(): Calculează suma de control SHA-2 (SHA-224, SHA-256, SHA-384 sau SHA-512) a unui text.