sql >> Database >  >> RDS >> MariaDB

MariaDB BENCHMARK() uitgelegd

In MariaDB, BENCHMARK() is een ingebouwde functie die een uitdrukking een bepaald aantal keren uitvoert.

Het kan worden gebruikt om te timen hoe snel MariaDB de uitdrukking verwerkt.

Het resultaat is altijd 0 . De functie is bedoeld om te worden gebruikt in de opdrachtregeltool mysql, die de uitvoeringstijden van query's rapporteert.

Syntaxis

De syntaxis gaat als volgt:

BENCHMARK(count,expr)

Waar count is het aantal keren dat u expr . wilt om te rennen.

Voorbeeld 1

Hier is een voorbeeld om te demonstreren:

SELECT BENCHMARK(2, SLEEP(2));

Resultaat:

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

Zoals verwacht, 0 werd teruggestuurd. Waar we echter in geïnteresseerd zijn, is de uitvoeringstijd van de query.

Hier gebruikte ik de SLEEP() functie om 2 seconden te slapen. Als u deze functie alleen gebruikt, duurt het normaal gesproken ongeveer 2 seconden om de instructie uit te voeren.

In dit geval ben ik echter geslaagd voor 2 als het eerste argument voor BENCHMARK() . Dat veroorzaakte de SLEEP() functie om twee keer uit te voeren, waardoor de BENCHMARK() functie duurt ongeveer 4 seconden om uit te voeren (4,015 seconden om precies te zijn).

Dit is wat er gebeurt als we het eerste argument verhogen tot 3 :

SELECT BENCHMARK(3, SLEEP(2));

Resultaat:

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

Deze keer de SLEEP() functie werd drie keer uitgevoerd, en dus BENCHMARK() duurde iets meer dan 6 seconden om uit te voeren.

Voorbeeld 2

Hier is een voorbeeld dat de ENCODE() . gebruikt functie om een ​​string (eerste argument) te coderen met een wachtwoord (tweede argument):

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

Resultaat:

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

We kunnen zien dat de bewerking 0,016 seconden in beslag nam.

Laten we het eerste argument verhogen van 100.000 naar 1.000.000 en kijken hoe dat de uitvoeringstijd beïnvloedt.

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

Resultaat:

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

Deze keer duurde het veel langer om te draaien.

Nullargument

Als het eerste argument null . is , dan null wordt geretourneerd:

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

Resultaat:

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

Maar als alleen het tweede argument null is , dan 0 wordt geretourneerd:

SELECT BENCHMARK(100000, null);

Resultaat:

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

Ongeldig aantal argumenten

BENCHMARK() . aanroepen zonder argumenten, of met het verkeerde aantal argumenten, resulteert in een fout:

SELECT BENCHMARK();

Resultaat:

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

En:

SELECT BENCHMARK(1, 2, 3);

Resultaat:

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

  1. Postgres UNIEKE BEPERKING voor array

  2. Hoe dubbele rijen in SQL te vinden?

  3. TCL-opdrachten in SQL

  4. Vervang meerdere tekens in een tekenreeks in SQL Server (T-SQL)