Eine langsame MySQL-Abfragegeschwindigkeit ist eine sehr problematische Sache. Daher hat der Autor einige Zeit damit verbracht, den Optimierungsplan für die MySQL-Abfragegeschwindigkeit auszuarbeiten Bei Fragen oder Fehlern können Sie mich gerne mitteilen und korrigieren. Wir können gemeinsam lernen und Fortschritte machen.
Empfohlene verwandte MySQL-Video-Tutorials: „MySQL-Tutorial“
Dieser Artikel wurde ebenfalls geschrieben denn Es kann Ihnen helfen, Ihre Zweifel auszuräumen und zum Thema zurückzukehren. Das Folgende ist mein Urteil basierend auf der Datenstruktur des B+-Baums und Spekulationen über die experimentellen Ergebnisse
Heute habe ich mit MySQL experimentiert count()-Betriebsoptimierung, wie folgt: Die Diskussion basiert auf dem Windows-Betriebssystem mysql5.7 InnoDB x86.
Die Struktur der erstellten Tabelle ist wie folgt (die Datenmenge beträgt 1 Million):
Zunächst einmal über MySQLs count(*), count( PK), count(1 ) Welches ist schneller?
Die Implementierungsergebnisse sind wie folgt:
Es gibt keinen Unterschied! Nach dem Hinzufügen der WHERE-Klausel dauern die drei Abfragen gleich lange, daher werde ich keine Bilder posten.
Ich habe eine select count(*) from table
SQL-Anweisung geschrieben, als ich vorher im Unternehmen war, und sie war sehr langsam, wenn viele Daten vorhanden waren. Wie also optimieren?
Dies beginnt mit dem Index von InnoDB. Der Index von InnoDB ist B+Tree.
Für den Primärschlüsselindex: Er speichert nur Daten auf Blattknoten, sein Schlüssel ist der Primärschlüssel und der Wert sind die gesamten Daten .
Für Hilfsindizes: Schlüssel ist die zu indizierende Spalte und Wert ist der Primärschlüssel.
Dies gibt uns zwei Informationen:
1. Die gesamten Daten werden basierend auf dem Primärschlüssel gefunden.
2. Nur der Primärschlüssel kann basierend auf dem Hilfsindex gefunden werden Die restlichen Informationen müssen über den Primärschlüssel gefunden werden.
Wenn wir also die count(*)-Operation optimieren wollen, müssen wir eine kurze Spalte finden und einen Hilfsindex dafür erstellen.
In meinem Beispiel ist es status
, obwohl sein „Schweregrad“ fast 0 ist.
Erstellen Sie zuerst einen Index: ALTER TABLE test1 ADD INDEX (
Status);
und fragen Sie dann ab, wie unten gezeigt:
Wie Sie sehen können, sank die Abfragezeit von 3,35 Sekunden auf 0,26 Sekunden und die Abfragegeschwindigkeit erhöhte sich um fast das 13-fache.
Wenn der Index die Spalte str
ist, was wird das Ergebnis sein?
Erstellen Sie zuerst einen Index: alter table test1 add index (str)
Die Ergebnisse sind wie folgt:
Wie Sie sehen können, beträgt die Zeit 0,422 s, was ebenfalls sehr schnell ist, aber im Vergleich zur Spalte status
Es besteht eine Lücke von etwa dem 1,5-fachen.
Um ein mutigeres Experiment durchzuführen, habe ich den Index der Spalte status
gelöscht, einen gemeinsamen Index von status
und left(omdb,200)
erstellt (diese Spalte hat durchschnittlich 1000 Zeichen) und dann nachgesehen zum Abfragezeitpunkt.
Index erstellen: alter table test1 add index (
Status,omdb(200))
Die Ergebnisse sind wie folgt:
Die Zeit beträgt 1,172 Sekunden
Alter Table Test1 Add Index (status
,imdbid );
Ergänzung! !
Achten Sie auf Indexfehler!
Das normale Erscheinungsbild nach der Erstellung des Index:
Sie können sehen, dass key_len 6 ist, die Beschreibung von Extra verwendet den Index.
Und wenn der Index fehlschlägt:
Es gibt viele Fälle von Indexfehlern, z. B. bei der Verwendung von Funktionen, !=-Operationen usw. Weitere Informationen finden Sie in der offiziellen Dokumentation.
Ich habe keine eingehenden Nachforschungen zu MySQL angestellt. Das Obige basiert auf meiner Einschätzung der Datenstruktur des B+-Baums und auf Spekulationen über die experimentellen Ergebnisse. Bitte korrigieren Sie mich.
Verwandte Artikel:
SQL Server 2005 Zusammenfassung von 50 Möglichkeiten zur Optimierung der Abfragegeschwindigkeit
Abfragegeschwindigkeit verbessern: SQL Server-Datenbankoptimierungsplan
Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn die MySQL-Zählerabfrage sehr langsam ist? Lösung zur Optimierung der MySQL-Abfragegeschwindigkeit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!