sql >> Database teknologi >  >> RDS >> MariaDB

MariaDB BENCHMARK() Forklaret

I MariaDB, BENCHMARK() er en indbygget funktion, der udfører et udtryk et bestemt antal gange.

Det kan bruges til at time, hvor hurtigt MariaDB behandler udtrykket.

Resultatet er altid 0 . Funktionen er beregnet til at blive brugt i mysql-kommandolinjeværktøjet, som rapporterer forespørgselsudførelsestider.

Syntaks

Syntaksen ser sådan ud:

BENCHMARK(count,expr)

Hvor count er det antal gange, du vil have expr at løbe.

Eksempel 1

Her er et eksempel til demonstration:

SELECT BENCHMARK(2, SLEEP(2));

Resultat:

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

Som forventet, 0 blev returneret. Det, vi dog er interesseret i, er forespørgselsudførelsestiden.

Her brugte jeg SLEEP() funktion til at sove i 2 sekunder. Brug af denne funktion i sig selv vil normalt få sætningen til at tage omkring 2 sekunder at udføre.

Men i dette tilfælde bestod jeg 2 som det første argument til BENCHMARK() . Det forårsagede SLEEP() funktion til at udføre to gange, hvilket forårsager BENCHMARK() funktionen tager omkring 4 sekunder at udføre (4,015 sekunder for at være præcis).

Her er, hvad der sker, hvis vi øger det første argument til 3 :

SELECT BENCHMARK(3, SLEEP(2));

Resultat:

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

Denne gang SLEEP() funktion blev udført tre gange, og så BENCHMARK() tog lidt over 6 sekunder at udføre.

Eksempel 2

Her er et eksempel, der bruger ENCODE() funktion til at kode en streng (første argument) med en adgangskode (andet argument):

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

Resultat:

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

Vi kan se, at operationen tog 0,016 sekunder at fuldføre.

Lad os øge det første argument fra 100.000 til 1.000.000 og se, hvordan det påvirker udførelsestiden.

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

Resultat:

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

Denne gang tog det meget længere tid at køre.

Nul-argument

Hvis det første argument er null , derefter null returneres:

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

Resultat:

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

Men hvis kun det andet argument er null , derefter 0 returneres:

SELECT BENCHMARK(100000, null);

Resultat:

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

Ugyldigt antal argumenter

Kalder BENCHMARK() uden argumenter, eller med det forkerte antal argumenter, resulterer det i en fejl:

SELECT BENCHMARK();

Resultat:

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

Og:

SELECT BENCHMARK(1, 2, 3);

Resultat:

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

  1. Relationelt databasestyringssystem (RDBMS):MSSQL vs MySQL

  2. PL/SQL:hvordan beder jeg brugerinput i en procedure?

  3. SQL-forespørgsel for at få den seneste række for hver forekomst af en given nøgle

  4. Kan du ikke bruge en LIKE-forespørgsel i en JDBC PreparedStatement?