Heim  >  Artikel  >  Datenbank  >  Was soll ich tun, wenn die MySQL-Zählerabfrage sehr langsam ist? Lösung zur Optimierung der MySQL-Abfragegeschwindigkeit

Was soll ich tun, wenn die MySQL-Zählerabfrage sehr langsam ist? Lösung zur Optimierung der MySQL-Abfragegeschwindigkeit

php是最好的语言
php是最好的语言Original
2018-08-04 17:00:0524390Durchsuche

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.

Count()-Optimierung großer MySQL-Tabellen

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):
Was soll ich tun, wenn die MySQL-Zählerabfrage sehr langsam ist? Lösung zur Optimierung der MySQL-Abfragegeschwindigkeit

Zunächst einmal über MySQLs count(*), count( PK), count(1 ) Welches ist schneller?
Die Implementierungsergebnisse sind wie folgt:
Was soll ich tun, wenn die MySQL-Zählerabfrage sehr langsam ist? Lösung zur Optimierung der MySQL-Abfragegeschwindigkeit
Was soll ich tun, wenn die MySQL-Zählerabfrage sehr langsam ist? Lösung zur Optimierung der MySQL-Abfragegeschwindigkeit
Was soll ich tun, wenn die MySQL-Zählerabfrage sehr langsam ist? Lösung zur Optimierung der MySQL-Abfragegeschwindigkeit
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:
Was soll ich tun, wenn die MySQL-Zählerabfrage sehr langsam ist? Lösung zur Optimierung der MySQL-Abfragegeschwindigkeit
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:
Was soll ich tun, wenn die MySQL-Zählerabfrage sehr langsam ist? Lösung zur Optimierung der MySQL-Abfragegeschwindigkeit

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:
Was soll ich tun, wenn die MySQL-Zählerabfrage sehr langsam ist? Lösung zur Optimierung der MySQL-Abfragegeschwindigkeit
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:
Was soll ich tun, wenn die MySQL-Zählerabfrage sehr langsam ist? Lösung zur Optimierung der MySQL-AbfragegeschwindigkeitSie können sehen, dass key_len 6 ist, die Beschreibung von Extra verwendet den Index.

Und wenn der Index fehlschlägt:
Was soll ich tun, wenn die MySQL-Zählerabfrage sehr langsam ist? Lösung zur Optimierung der MySQL-Abfragegeschwindigkeit

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn