Die langsame MySQL-Abfrage hat folgende Gründe: 1. Es gibt keinen Index oder der Index wird nicht verwendet. 2. Der niedrige E/A-Durchsatz bildet einen Engpass. 4. Die Netzwerkgeschwindigkeit ist langsam . Die Datenmenge in einer Abfrage ist zu groß. 6. Deadlock tritt auf.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, MySQL-Version 8.0.22, DELL G3-Computer. Diese Methode ist für alle Computermarken geeignet.
Verwandte kostenlose Lernempfehlungen: MySQL-Video-Tutorial
Die langsame MySQL-Abfrage ist einflussreich.
Häufige Gründe für langsame Abfragen sind:
1. Es gibt keinen Index oder es wird kein Index verwendet.
PS: Indizes werden verwendet, um Datensätze mit bestimmten Werten schnell zu finden. Alle MySQL-Indizes werden in Form von B-Bäumen gespeichert. Wenn kein Index vorhanden ist, muss MySQL beim Ausführen einer Abfrage alle Datensätze in der gesamten Tabelle beginnend mit dem ersten Datensatz scannen, bis ein Datensatz gefunden wird, der die Anforderungen erfüllt. Je größer die Anzahl der Datensätze in der Tabelle ist, desto höher sind die Kosten für diesen Vorgang. Wenn ein Index für die als Suchbedingung verwendete Spalte erstellt wurde, kann MySQL schnell den Speicherort des Zieldatensatzes ermitteln, ohne Datensätze scannen zu müssen. Wenn die Tabelle 1000 Datensätze enthält, ist das Auffinden von Datensätzen über den Index mindestens 100-mal schneller als das sequentielle Durchsuchen der Datensätze.
Indextyp:
Gewöhnlicher Index: Dies ist der einfachste Indextyp ohne Einschränkungen wie Eindeutigkeit.
Einzigartiger Index: Im Grunde das Gleiche wie ein normaler Index, aber alle Indexspalten können nur einmal erscheinen, um die Einzigartigkeit zu gewährleisten.
Primärschlüssel: Der Primärschlüssel ist ein eindeutiger Index, muss aber als „PRIMARY KEY“ angegeben werden.
Volltextindex: MYSQL unterstützt Volltextindex und Volltextsuche ab 3.23.23. In MYSQL ist der Indextyp des Volltextindex FULLTEXT. Volltextindizes können für Spalten vom Typ VARCHAR oder TEXT erstellt werden.
2. Ein geringer IO-Durchsatz bildet einen Engpass.
PS: Dies ist eine Analyse der Systemebene, dass MYSQL mehr IO verbraucht. Auch bei der allgemeinen Datenbanküberwachung wird IO stärker berücksichtigt.
Überwachungsbefehl: $iostat -d -k 1 10
Parameter -d bedeutet, den Nutzungsstatus des Geräts (Festplatte) anzuzeigen; -k einige Spalten, die Blöcke als Einheiten verwenden, werden gezwungen, Kilobyte als Einheiten zu verwenden; Anzeigedaten: Sie werden alle 1 Sekunde aktualisiert und insgesamt 10 Mal angezeigt. 3. Unzureichender Speicher Der Wert von swpd ist nicht 0 oder relativ groß, z. B. mehr als 100 Millionen, aber die Werte von si usw. sind für eine lange Zeit 0, wir müssen uns über diese Situation keine Sorgen machen und haben keine Auswirkungen Systemleistung.
free: freier physischer Speicher buff: Wird als Puffer-Cache-Speicher verwendet und puffert das Lesen und Schreiben von Blockgeräten.
Cache: Wird als Seiten-Cache-Speicher und Dateisystem-Cache verwendet. • Wenn der Cache-Wert groß ist, erläutern Sie, dass es viele gibt Dateien im Cache, wenn alle häufig aufgerufenen Dateien zwischengespeichert werden können, ist die Lese-E/A-Bi der Festplatte sehr klein.
4. Die Netzwerkgeschwindigkeit ist langsam.pingen Sie IP -t, um zu überprüfen, ob ein Paketverlust vorliegt.
5. Die Datenmenge in einer Abfrage ist zu groß.Zum Beispiel gibt es keine Paging-Abfrage und Zehntausende Datensätze können gleichzeitig extrahiert werden. Möglicherweise steckt die Datenbank fest.
6. Deadlock tritt auf
Der sogenannte Deadlock: bezieht sich auf das Phänomen, dass zwei oder mehr Prozesse aufgrund des Wettbewerbs um Ressourcen während des Ausführungsprozesses aufeinander warten um fortzufahren.
Innodb-Status anzeigen, um den Engine-Status zu überprüfen. Sie können sehen, welche Anweisungen einen Deadlock verursachen. Führen Sie show Processlist aus, um die Deadlock-Thread-Nummer zu finden. Dann werden unnötige Zeilen oder Spalten zurückgegeben.
Allgemeine Abfrage-SQL-Anweisungen müssen die Felder klar angeben. Verwenden Sie nicht * zur Abfrage8. Achten Sie auf den Unterschied zwischen UNion und UNion all. UNION ist alles in Ordnung
UNION filtert doppelte Datensätze nach der Tabellenverknüpfung heraus, sortiert also nach der Tabellenverknüpfung die generierte Ergebnismenge, löscht doppelte Datensätze und gibt die Ergebnisse zurück. Daher muss die Effizienz aller Gewerkschaften hoch sein!Das obige ist der detaillierte Inhalt vonHat die langsame MySQL-Abfrage irgendwelche Auswirkungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!