MySQL Slow Query-Optimierung: Die Vorteile von Limit aus Theorie und Praxis

MySQL Slow Query-Optimierung: Die Vorteile von Limit aus Theorie und Praxis

Oftmals erwarten wir, dass das Abfrageergebnis höchstens ein Datensatz ist. In diesem Fall ist es am besten, das Limit 1 zu verwenden. Wenn diese Daten gefunden werden, beendet MySQL die Abfrage sofort und führt keine weiteren nutzlosen Abfragen aus, wodurch die Effizienz verbessert wird.

Testen wir dies, indem wir Lilys Punktzahl in einer MySQL-Tabelle mit 100.000 Einträgen nachschlagen (vorausgesetzt, es gibt nur eine Lily im System und wir benötigen nur diese Daten). Um den Zeitunterschied anzuzeigen, erstelle ich keinen Index für das Namensfeld der Tabelle.

Schauen wir uns zunächst die Tabellenstruktur an:

mysql> anzeigen, Tabelle erstellen tb_province;
+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Tabelle | Tabelle erstellen |
+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tb_province | CREATE TABLE `tb_province` (
 `id` bigint(10) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(32) NICHT NULL,
 `score` int(10) unsigned DEFAULT '0',
 `x` int(10) unsigned DEFAULT '0',
 `x1` int(10) unsigned DEFAULT '0',
 `x2` int(10) unsigned DEFAULT '0',
 `x3` int(10) unsigned DEFAULT '0',
 `x4` int(10) unsigned DEFAULT '0',
 `x5` int(10) unsigned DEFAULT '0',
 `x6` int(10) unsigned DEFAULT '0',
 `x7` int(10) unsigned DEFAULT '0',
 `x8` int(10) unsigned DEFAULT '0',
 `x9` int(10) unsigned DEFAULT '0',
 `x10` int(10) unsigned DEFAULT '0',
 PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=124178 DEFAULT CHARSET=latin1 |
+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 Zeile im Satz (0,00 Sek.)

Wir schalten den Schalter „set profiling=1;“ ein und führen zum Vergleich MySQL-Anweisungen aus:

mysql> wähle Score aus tb_province, wobei Name='lily';
+----------+
| Punktzahl |
+----------+
| 100 |
+----------+
1 Zeile im Satz (0,03 Sek.)

mysql> wähle Score aus tb_province, wobei Name='lily';
+----------+
| Punktzahl |
+----------+
| 100 |
+----------+
1 Zeile im Satz (0,03 Sek.)

mysql> wähle Score aus tb_province, wobei Name='lily';
+----------+
| Punktzahl |
+----------+
| 100 |
+----------+
1 Zeile im Satz (0,04 Sek.)

mysql> wähle Score aus tb_province, wobei Name='lily';
+----------+
| Punktzahl |
+----------+
| 100 |
+----------+
1 Zeile im Satz (0,02 Sek.)

mysql> wähle Score aus tb_province, wobei Name='lily';
+----------+
| Punktzahl |
+----------+
| 100 |
+----------+
1 Zeile im Satz (0,03 Sek.)

mysql> wähle Score aus tb_province, wobei Name='lily', Limit 1;
+----------+
| Punktzahl |
+----------+
| 100 |
+----------+
1 Zeile im Satz (0,00 Sek.)

mysql> wähle Score aus tb_province, wobei Name='lily', Limit 1;
+----------+
| Punktzahl |
+----------+
| 100 |
+----------+
1 Zeile im Satz (0,00 Sek.)

mysql> wähle Score aus tb_province, wobei Name='lily', Limit 1;
+----------+
| Punktzahl |
+----------+
| 100 |
+----------+
1 Zeile im Satz (0,00 Sek.)

mysql> wähle Score aus tb_province, wobei Name='lily', Limit 1;
+----------+
| Punktzahl |
+----------+
| 100 |
+----------+
1 Zeile im Satz (0,01 Sek.)

mysql> wähle Score aus tb_province, wobei Name='lily', Limit 1;
+----------+
| Punktzahl |
+----------+
| 100 |
+----------+
1 Zeile im Satz (0,00 Sek.)

Wie Sie sehen, haben wir 5 Vergleichstests durchgeführt, um herauszufinden, ob Limit 1 verwendet werden sollte. Werfen wir einen Blick auf die Ergebnisse:

mysql> Profile anzeigen;
+----------+------------+---------------------------------------------------------+
| Abfrage-ID | Dauer | Abfrage |
+----------+------------+---------------------------------------------------------+
| 5 | 0,02686000 | Wähle Punktzahl aus tb_province, wobei Name='lily' |
| 6 | 0,02649050 | Wähle Punktzahl aus tb_province, wobei Name='lily' |
| 7 | 0,03413500 | Wähle Punktzahl aus tb_province, wobei Name='lily' |
| 8 | 0,02601350 | Wähle Punktzahl aus tb_province, wobei Name='lily' |
| 9 | 0,02785775 | Wähle Punktzahl aus tb_province, wobei Name='lily' |
| 10 | 0,00042300 | Wähle Punktzahl aus tb_province, wobei Name='lily', Limit 1 |
| 11 | 0,00043250 | Wähle Punktzahl aus tb_province, wobei Name='lily', Limit 1 |
| 12 | 0,00044350 | Wähle Punktzahl aus tb_province, wobei Name='lily', Limit 1 |
| 13 | 0,00053200 | Wähle Punktzahl aus tb_province, wobei Name='lily', Limit 1 |
| 14 | 0,00043250 | Wähle Punktzahl aus tb_province, wobei Name='lily', Limit 1 |
+----------+------------+---------------------------------------------------------+
14 Zeilen im Set, 1 Warnung (0,00 Sek.)

Es ist ersichtlich, dass sich die Effizienz von MySQL-Anweisungen nach der Verwendung von Limit 1 tatsächlich erheblich verbessert. Bei einer größeren Tabelle ist die Effizienzsteigerung deutlicher.

Wir haben die Vorteile von „limit“ sowohl in theoretischen als auch in praktischen Skripten demonstriert. Daher lautet unser Vorschlag: Verwenden Sie „limit“, wenn es verfügbar ist (wenn das Ergebnis ein Vielfaches ist, können Sie „limit 1“ natürlich auf keinen Fall verwenden).

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Methode und Optimierungsprinzip für langsame MySQL-Abfragen
  • So optimieren Sie die MySQL-Leistung durch langsame MySQL-Abfragen
  • Beispiel-Tutorial zur Optimierung langsamer MySQL-Abfragen und zur Analyse des Protokolls langsamer Abfragen
  • Lösung zur Optimierung langsamer MySQL-Abfragen

<<:  So implementieren Sie die domänenübergreifende API-Proxy-Weiterleitung über die Nginx-Proxy-Weiterleitungskonfiguration

>>:  Zusammenfassung von über 50 Hilfsfunktionen in JavaScript

Artikel empfehlen

MySQL-Einstellungscode für die grüne Version und Details zum Fehler 1067

MySQL-Einstellungscode für grüne Version und Fehl...

Docker-Installations-Tutorial zu RocketMQ (am ausführlichsten)

RocketMQ ist eine verteilte, warteschlangenbasier...

HTML-Maus-CSS-Steuerung

Im Allgemeinen wird die Maus als nach oben gericht...

Eine kurze Analyse der parallelen WriteSet-Replikation von MySQL

【Historischer Hintergrund】 Ich arbeite seit drei ...

Spezifische Verwendung zusammengesetzter CSS-Selektoren

Kreuzungsauswahl Der Schnittpunktselektor besteht...

Nginx erstellt Implementierungscode für RTMP-Liveserver

1. Erstellen Sie ein neues RTMP-Verzeichnis im Ng...

So erkennen Sie mit Apache Tika, ob eine Datei beschädigt ist

Apache Tika ist eine Bibliothek zur Dateityperken...

Prozessdiagramm für die Sitzungsfreigabe bei Tomcat Nginx Redis

1. Vorbereitung Middleware: Tomcat, Redis, Nginx ...

Häufig verwendete englische Schriftarten für die Webseitenerstellung

Arial Arial ist eine serifenlose TrueType-Schrifta...

JavaScript Canvas implementiert die Bewegung des Balls entlang der Maus

In diesem Artikelbeispiel wird der spezifische Co...

Deinstallieren der MySQL-Datenbank unter Linux

Wie deinstalliere ich eine MySQL-Datenbank unter ...

Lösung für die leere Seite nach einem vue.js-gepackten Projekt

Ich glaube, dass viele Partner, die gerade erst m...

Vollständiger Prozessbericht der Nginx-Reverse-Proxy-Konfiguration

1. Vorbereitung Installieren Sie Tomcat auf dem L...