VorwortBei unserer täglichen Arbeit führen wir manchmal langsame Abfragen aus, um einige SQL-Anweisungen aufzuzeichnen, deren Ausführung lange dauert. Das Auffinden dieser SQL-Anweisungen bedeutet nicht, dass die Arbeit erledigt ist. Manchmal verwenden wir häufig den Befehl „explain“, um den Ausführungsplan dieser SQL-Anweisungen anzuzeigen und festzustellen, ob die SQL-Anweisung einen Index verwendet und ob ein vollständiger Tabellenscan durchgeführt wird. Dies kann über den Befehl „explain“ angezeigt werden. Wir verfügen also über ein tiefes Verständnis des kostenbasierten Optimierers von MySQL und können auch viele Einzelheiten zu den Zugriffsstrategien erhalten, die vom Optimierer in Betracht gezogen werden können, und dazu, welche Strategie vom Optimierer voraussichtlich beim Ausführen von SQL-Anweisungen übernommen wird. (QEP: SQL generiert einen Ausführungsplan für die Abfrageausführung) mysql> erläutern Sie „select * from servers“; +----+----------+---------+------+---------------+-----------+---------+---------+------+------+------+ | ID | Auswahltyp | Tabelle | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | Extra | +----+----------+---------+------+---------------+-----------+---------+---------+------+------+------+ | 1 | EINFACH | Server | ALLE | NULL | NULL | NULL | NULL | 1 | NULL | +----+----------+---------+------+---------------+-----------+---------+---------+------+------+------+ 1 Zeile im Satz (0,03 Sek.) 1. Einführung in EXPLAINMit dem Schlüsselwort EXPLAIN können Sie die Ausführung von SQL-Abfrageanweisungen durch den Optimierer simulieren, sodass Sie erfahren, wie MySQL Ihre SQL-Anweisungen verarbeitet. Analysieren Sie den Leistungsengpass Ihrer Abfrageanweisung oder Tabellenstruktur. Durch Erklären können wir die folgenden Informationen erhalten:
Verwendung: Erläuterung + SQL-Anweisung. Die enthaltenen Felder sind wie folgt 2. Bedeutung der einzelnen Felder im Ausführungsplan2.1 Ich würde Die ID ist dieselbe und die Ausführungsreihenfolge ist von oben nach unten Die ID ist unterschiedlich. Wenn es sich um eine Unterabfrage handelt, erhöht sich die ID-Nummer. Je größer der ID-Wert, desto höher die Priorität und desto früher wird sie ausgeführt. Wenn die IDs gleich oder unterschiedlich sind und gleichzeitig vorhanden sind, kann dieselbe ID als Gruppe betrachtet werden. Die Ausführung erfolgt von oben nach unten in derselben Gruppe, und die Gruppe mit der größten ID wird zuerst ausgeführt. 2.4 Typ Unter Typ wird angezeigt, welcher Typ in der Abfrage verwendet wird. Zu den in Typ enthaltenen Typen gehören die folgenden: System > const > eq_ref > ref > Bereich > Index > alle
2.5 mögliche Schlüssel und Schlüssel Possible_keys zeigt die möglichen Indizes, die auf diese Tabelle angewendet werden können (einen oder mehrere). Wenn für die an der Abfrage beteiligten Felder ein Index vorhanden ist, wird dieser zwar aufgelistet, aber möglicherweise nicht tatsächlich von der Abfrage verwendet. Der vom Schlüssel tatsächlich verwendete Index. Wenn er NULL ist, wird kein Index verwendet. (Mögliche Gründe sind fehlender Index oder Indexfehler) 2.6 Schlüssellänge Gibt die Anzahl der im Index verwendeten Bytes an. Mit dieser Spalte kann die Länge des in der Abfrage verwendeten Indexes berechnet werden. Je kürzer die Länge, desto besser, ohne dass die Genauigkeit verloren geht. 2,7 Reihen Schätzen Sie anhand der Tabellenstatistiken und der Indexauswahl grob die Anzahl der Zeilen, die zum Suchen der erforderlichen Datensätze erforderlich sind. Das heißt: je weniger, desto besser. 2.8 Extra 2.8.1 Filesort verwenden Dies bedeutet, dass MySQL zum Sortieren der Daten einen externen Index verwendet, anstatt sie in der Reihenfolge der Indizes in der Tabelle zu lesen. Sortiervorgänge in MySQL, die nicht mithilfe von Indizes durchgeführt werden können, werden als „Dateisortierungen“ bezeichnet. 2.8.2 Verwendung von temporären Eine temporäre Tabelle wird zum Speichern von Zwischenergebnissen verwendet. MySQL verwendet eine temporäre Tabelle zum Sortieren von Abfrageergebnissen. Wird häufig zum Sortieren nach Sortierung und Gruppieren nach Abfrage verwendet. 2.8.3 Index verwenden Gibt an, dass bei der entsprechenden Auswahloperation ein überdeckender Index verwendet wird, wodurch der Zugriff auf die Datenzeilen der Tabelle vermieden wird, was effizient ist. Wenn gleichzeitig „using where“ vorkommt, bedeutet dies, dass der Index zum Durchführen von Indexschlüsselwertsuchen verwendet wird. Wenn „using where“ nicht gleichzeitig vorkommt, bedeutet dies, dass der Index zum Lesen von Daten und nicht zum Durchführen von Suchvorgängen verwendet wird. 2.8.4 Verwenden des Join-Puffers Gibt an, dass der Verbindungscache verwendet wird. Beispielsweise ist bei Abfragen die Anzahl der Verknüpfungen mehrerer Tabellen sehr groß. Erhöhen Sie daher den Verknüpfungspuffer in der Konfigurationsdatei. ZusammenfassenDies ist das Ende dieses Artikels über die eingehende Analyse der MySQL-Erklärungsnutzung und -ergebnisse. Weitere relevante Inhalte zur MySQL-Erklärungsnutzung und zu -ergebnissen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: HTML-Tutorial: Horizontales Liniensegment in HTML
>>: Implementierung eines laufenden Springboot-Projekts mit Docker
Als ich kürzlich mit C# ein Webprogramm erstellte,...
Nun, vielleicht sind Sie ein Design-Guru, oder vie...
Ich habe mir kürzlich die Pressekonferenz von App...
Ergebnisse erzielen Umsetzungsideen Der Schmelzef...
Ergebnis:Implementierungscode html <link href=...
Hintergrund Viele Website-Designs bestehen im All...
Als ich die CPP-Datei zum ersten Mal mit G++ komp...
Verwandte Systemaufrufe für Dateioperationen erst...
In diesem Artikelbeispiel wird der spezifische Co...
Bei der Verwendung von MySQL werden häufig Trigge...
Ohne weitere Umschweife hier ein Demobild. Die im...
In diesem Artikel wird die Installations- und Kon...
Ich bin heute bei der Arbeit auf ein SQL-Problem ...
1: SVN installieren yum install -y Subversion 2. ...
Nachdem wir Docker gestartet haben, schauen wir u...