Erklären Sie die langsame SQL-Optimierung

Langsames SQL wird mehr oder weniger in jedem Projekt vorhanden sein. Langsames SQL beeinträchtigt die Benutzererfahrung. MySQL bietet langsame SQL-AnalysetoolsErklären Sie. Jedenfalls kann ich mich nicht an einige Attribute und Verwendungszwecke erinnern, die ich jedes Mal erklären müsste. Ich werde sie hier aufzeichnen, um zukünftige langsame SQL-Analysen zu erleichtern

1. Attribut erklären

Fügen Sie hier eine Bildbeschreibung ein

Feld erklären
Ausweis Jede Operations-ID, die unabhängig ausgeführt wird, gibt die Reihenfolge an, in der das Objekt ausgeführt wird. Je größer der ID-Wert, desto zuerst wird ausgeführt. Wenn sie gleich sind, erfolgt die Ausführungsreihenfolge von oben nach unten.
Art auswählen Der Typ jeder SELECT-Klausel in der Abfrage
Tisch Der Name des Objekts, das bearbeitet wird, normalerweise der Tabellenname, es gibt jedoch auch andere Formate
Partitionen Passende Partitionsinformationen (NULL für nicht partitionierte Tabellen)
Typ Art des Join-Vorgangs
mögliche_Schlüssel Mögliche Indizes
Schlüssel Die vom Optimierer tatsächlich verwendeten Indizes (wichtigste Spalten). Die Join-Typen vom besten zum schlechtesten sind const, eq_reg, ref, range, index und ALL. Wenn ALL angezeigt wird, bedeutet dies, dass das aktuelle SQL einen „schlechten Geruch“ hat.
key_len Die Länge des vom Optimierer ausgewählten Indexschlüssels in Bytes
ref Gibt das Referenzobjekt des betriebenen Objekts in dieser Zeile an. Wenn kein Referenzobjekt vorhanden ist, ist es NULL.
Reihen Anzahl der von der Abfrageausführung gescannten Tupel (für innodb ist dieser Wert eine Schätzung)
gefiltert Der Prozentsatz der Tupel, deren Daten in der Bedingungstabelle gefiltert werden
extra Wichtige Zusatzinformationen zum Ausführungsplan. Seien Sie vorsichtig, wenn in dieser Spalte die Worte „Verwenden von Filesort, Verwenden von Temporär“ erscheinen. Es ist wahrscheinlich, dass die SQL-Anweisung optimiert werden muss.

1.select_type type
SIMPLE: Einfache SELECT-Abfrage, die Abfrage enthält keine Unterabfragen oder UNION
PRIMÄR: Die Abfrage enthält alle komplexen Unterteile, die äußerste Abfrage
UNTERABFRAGE: SELECT oder WHERE enthält den Unterabfrageteil: SELECT, um das Ergebnis aus der UNION-Tabelle abzurufenUNION-ERGEBNIS: Wenn UNION im zweiten SELECT erscheint, wird es als UNION markiert. Wenn UNION in der Unterabfrage der FROM-Klausel enthalten ist, wird die äußere Unterabfrage als DERIVED markiert UNION: Die in FROM enthaltenen Unterabfragen sind als DERIVER (Derivat) gekennzeichnet. MySQL führt diese Unterabfragen rekursiv aus und legt die Ergebnisse in der temporären Tabelle ab
DERIVED

2.type type
system: Die Tabelle hat nur eine Zeile mit Datensätzen (entspricht der Systemtabelle). Dies ist ein Sonderfall vom Typ const und erscheint normalerweise nicht.
const: Wenn über den Index gefunden, wird const verwendet, um den Primärschlüsselindex oder den eindeutigen Index zu vergleichen. Da es nur mit einer Datenzeile übereinstimmen kann, ist es sehr schnell. Wenn Sie den Primärschlüssel in die Where-Liste einfügen, kann MySQL die Abfrage in eine Konstante umwandeln
eq_ref: einen eindeutigen Indexscan, nur für jeden Indexschlüssel Ein Datensatz in der Tabelle stimmt damit überein. Wird häufig bei Primärschlüssel- oder eindeutigen Index-Scans angezeigt
ref: nicht eindeutige Index-Scans, die alle Zeilen zurückgeben, die mit einem einzelnen Wert übereinstimmen. Im Wesentlichen handelt es sich um einen Indexzugriff, der alle Zeilen zurückgibt, die mit einem einzelnen Wert übereinstimmen. Es können jedoch mehrere übereinstimmende Zeilen gefunden werden, daher sollte es sich um eine Mischung aus Suche und Scan
Bereich
index: Vollständiger Index-Scan, der Unterschied zwischen index und ALL ist dass der Indextyp nur den Indexbaum durchläuft, was normalerweise schneller als ALLE ist, da Indexdateien normalerweise kleiner als Datendateien sind. (Das heißt, obwohl ALL und Index beide die gesamte Tabelle lesen, wird der Index vom Index und ALL von der Festplatte gelesen.)
all: Vollständiger Tabellenscan, Durchsuchen der gesamten Tabelle, um passende Zeilen zu erhalten

3.Erläuterung des Extra-Felds in den EXPLAIN-Informationen
(1)Verwendung von Dateisortierung (wichtiger Indikator)
(2)Verwendung von temporärer (wichtiger) Indikator)< /span> (7)Tabellen auswählen, die wegoptimiert sind (ungewöhnlich verwendete Indikatoren)< /span> Zusätzliche Felderklärungen finden Sie in diesem Artikel (8)distinct (ungewöhnlich verwendeter Indikator) (6)unmöglich, wo (allgemeine wichtige Indikatoren) (5 )Join-Puffer verwenden (allgemeine wichtige Indikatoren) (4)Verwendung von where (allgemeiner wichtiger Indikator)
(3)Verwendung des Index (wichtiger Indikator)





2. Profilabfragen zeigen die Ausführungsdetails und den Lebenszyklus von SQL-Anweisungen auf dem Server an

Show Profile wird von MySQL bereitgestellt und kann zur Analyse des Ressourcenverbrauchs der Anweisungsausführung in der aktuellen Sitzung verwendet werden. Es kann für SQL-Tuning-Messungen verwendet werden. Es ist standardmäßig deaktiviert und speichert die letzten 15 laufenden Ergebnisse
Analyseschritte
1. Status prüfen: SHOW VARIABLES LIKE 'profiling';
2. Einschalten: set profiling=on ;
3. Ergebnisse anzeigen: Profile anzeigen;
4. SQL diagnostizieren: Profil-CPU anzeigen, IO für Abfrage der vorherigen SQL-Nummer blockieren;
Fügen Sie hier eine Bildbeschreibung ein

ALL:显示所有开销信息
BLOCK IO:显示IO相关开销
CONTEXT SWITCHES:显示上下文切换相关开销
CPU:显示CPU相关开销
IPC:显示发送接收相关开销
MEMORY:显示内存相关开销
PAGE FAULTS:显示页面错误相关开销
SOURCE:显示和Source_function,Source_file,Source_line相关开销
SWAPS:显示交换次数相关开销

Hinweis (Sie müssen optimieren, wenn diese Situationen auftreten)
Konvertieren von HEAP in MyISAM: Die Abfrageergebnisse sind zu groß und es ist nicht genügend Speicher vorhanden, um sie auf die Festplatte zu verschieben gesperrt< /span> Kopieren in die tmp-Tabelle auf der Festplatte: Kopieren der temporären Tabelle im Speicher auf die Festplatte
TMP-Tabelle erstellen: Erstellen einer temporären Tabelle

3. Optimierung der SQL-Datenbankserverparameter

Wenn Sortieren nach und Gruppieren nach keine Indizes verwenden können, erhöhen Sie die Parametereinstellung „max_length_for_sort_data“ und die Parametereinstellung „sort_buffer_size“.

おすすめ

転載: blog.csdn.net/hsadfdsahfdsgfds/article/details/131281264