sql >> Databáze >  >> RDS >> MariaDB

MariaDB BENCHMARK() Vysvětleno

V MariaDB, BENCHMARK() je vestavěná funkce, která provádí výraz zadaný počet opakování.

Lze jej použít k měření rychlosti zpracování výrazu MariaDB.

Výsledek je vždy 0 . Tato funkce je určena k použití v rámci nástroje příkazového řádku mysql, který hlásí časy provádění dotazu.

Syntaxe

Syntaxe vypadá takto:

BENCHMARK(count,expr)

Kde count je počet, kolikrát chcete expr spustit.

Příklad 1

Zde je příklad k demonstraci:

SELECT BENCHMARK(2, SLEEP(2));

Výsledek:

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

Podle očekávání 0 byl vrácen. Co nás však zajímá, je doba provádění dotazu.

Zde jsem použil SLEEP() funkce uspání na 2 sekundy. Samotné použití této funkce by normálně způsobilo, že provedení příkazu trvalo přibližně 2 sekundy.

V tomto případě jsem však prošel 2 jako první argument pro BENCHMARK() . To způsobilo SLEEP() funkce se spustí dvakrát, což způsobí BENCHMARK() provedení funkce trvá přibližně 4 sekundy (přesněji 4,015 sekundy).

Zde je to, co se stane, když zvýšíme první argument na 3 :

SELECT BENCHMARK(3, SLEEP(2));

Výsledek:

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

Tentokrát SLEEP() funkce byla provedena třikrát, a tak BENCHMARK() spuštění trvalo něco málo přes 6 sekund.

Příklad 2

Zde je příklad, který používá ENCODE() funkce pro kódování řetězce (první argument) heslem (druhý argument):

SELECT BENCHMARK(100000, ENCODE('Homer', 'Symptom'));

Výsledek:

+-----------------------------------------------+
| BENCHMARK(100000, ENCODE('Homer', 'Symptom')) |
+-----------------------------------------------+
|                                             0 |
+-----------------------------------------------+
1 row in set (0.016 sec)

Vidíme, že dokončení operace trvalo 0,016 sekundy.

Zvětšeme první argument ze 100 000 na 1 000 000 a uvidíme, jak to ovlivní dobu provedení.

SELECT BENCHMARK(1000000, ENCODE('Homer', 'Symptom'));

Výsledek:

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

Tentokrát to trvalo mnohem déle.

Nulový argument

Pokud je první argument null a poté null je vráceno:

SELECT BENCHMARK(null, ENCODE('Homer', 'Symptom'));

Výsledek:

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

Ale pokud je pouze druhý argument null a poté 0 je vráceno:

SELECT BENCHMARK(100000, null);

Výsledek:

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

Neplatný počet argumentů

Volání BENCHMARK() bez argumentů nebo s nesprávným počtem argumentů vede k chybě:

SELECT BENCHMARK();

Výsledek:

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

A:

SELECT BENCHMARK(1, 2, 3);

Výsledek:

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

  1. Vícenásobné vložení SQL Oracle

  2. Odpovídající všem hodnotám v klauzuli IN

  3. Funkce REGEXP_SUBSTR() v Oracle

  4. Kdy a jak použít klauzuli SQL PARTITION BY