Vorwort Als wir im vorherigen Interviewprozess nach dem Ausführungsplan gefragt wurden, wussten viele Leute nicht, was das war. Einige dachten sogar, dass Ausführungsplan und Ausführungszeit dasselbe Konzept seien. Sehen wir uns heute an, was ein Ausführungsplan ist und wozu er dient. Was ist ein Ausführungsplan?
Einfach ausgedrückt ist der Ausführungsplan die Leistung von SQL, wenn es in der Datenbank ausgeführt wird. Er wird normalerweise in Szenarien wie SQL-Leistungsanalyse und -optimierung verwendet. 1. Was kann uns der Ausführungsplan sagen?
- Wie SQL Indizes verwendet
- Ausführungsreihenfolge von Join-Abfragen
- Funktion „Gescannte Daten abfragen“
2. Inhalte des Umsetzungsplans 
Die Ausgabe des SQL-Ausführungsplans kann mehrere Zeilen umfassen, wobei jede Zeile eine Operation an einem Datenbankobjekt darstellt 1. ID-Spalte
- Wenn die Daten in der ID-Spalte eine Zahlenfolge sind, geben sie die Reihenfolge an, in der die SELECT-Anweisungen ausgeführt werden. Wenn sie NULL sind, bedeutet dies, dass diese Datenzeile der Ergebnissatz ist, der durch die UNION-Operation zweier anderer SQL-Anweisungen generiert wurde.
- Wenn die ID-Werte gleich sind, bedeutet dies, dass die SQL-Ausführungsreihenfolge wie gezeigt von oben nach unten verläuft.
- Wenn die ID-Werte unterschiedlich sind, gilt: Je größer der ID-Wert, desto höher die Priorität und desto früher wird die Ausführung durchgeführt.
Demo 
Sie können sehen, dass der obige Ausführungsplan 3 Ergebniszeilen zurückgibt. Der Wert der ID-Spalte kann als Sequenznummer der SELECT-Operation in SQL betrachtet werden.
Da es im obigen SQL nur ein SELECT gibt, sind alle IDs 1. Daher müssen wir den Ausführungsplan von oben nach unten lesen.
Gemäß unserer SQL-Anweisung gehen wir davon aus, dass die Ausführungsreihenfolge a, b, c ist. Aus der obigen Abbildung können wir jedoch erkennen, dass MySQL die Tabellenzuordnungsoperation nicht in der in SQL geschriebenen Reihenfolge abschließt.
Die Ausführungsreihenfolge der Tabellen ist a, c, b. Dies liegt daran, dass der MySQL-Optimierer die tatsächliche Reihenfolge der Tabellenzuordnungen basierend auf den statistischen Informationen der Indizes in der Tabelle anpasst. 2. SELECT_TYPE-Spalte
Wert | Bedeutung |
---|
EINFACH | Abfragen, die keine Unterabfragen oder UNION-Operationen enthalten | PRIMÄR | Wenn eine Abfrage Unterabfragen enthält, wird die äußerste Abfrage als PRIMARY markiert. | UNTERABFRAGE | Unterabfragen in der SELECT-Liste | ABHÄNGIGE UNTERABFRAGE | Unterabfragen, die von äußeren Ergebnissen abhängen | UNION | Der Wert der zweiten oder nachfolgenden Abfrage der Union-Operation ist union | ABHÄNGIGE GEWERKSCHAFT | Wenn UNION als Unterabfrage verwendet wird, der select_type-Wert der zweiten oder nachfolgenden Abfrage | UNION-ERGEBNIS | Der von UNION erzeugte Ergebnissatz | ABGELEITET | Unterabfragen, die in der FROM-Klausel vorkommen |
3. Tabellenspalten
Folgende Ergebnisse sind enthalten: Gibt den Namen der Tabelle aus, in der sich die Datenzeile befindet. Wenn die Tabelle einen Alias besitzt, wird dieser angezeigt. <union M,N>: Der Ergebnissatz, der durch Abfragen der Union mit den IDs M und N generiert wird <abgeleitet N>/<Unterabfrage N>: Ergebnisse, die von der Abfrage mit der ID N generiert wurden
4. Spalte PARTITIONS:
Abfrage, aus welcher Partition die übereinstimmenden Datensätze stammen. Bei partitionierten Tabellen wird die Partitions-ID der Abfrage angezeigt. Für nicht partitionierte Tabellen ist dies NULL.
5. Spalte TYPE
Die Leistung wird wie folgt in absteigender Reihenfolge aufgeführt: Wert | Bedeutung |
---|
System | Dies ist ein Sonderfall des const-Jointyps und wird verwendet, wenn die abgefragte Tabelle nur eine Zeile hat. | Konstante | Wird verwendet, wenn in der Tabelle nur eine übereinstimmende Zeile vorhanden ist, z. B. bei einer Abfrage eines Primärschlüssels oder eines eindeutigen Index. Dies ist die effizienteste Join-Methode. | eq_ref | Eindeutiger Index oder Primärschlüssel-Indexabfrage, für jeden Indexschlüssel gibt es in der Tabelle nur einen passenden Datensatz. | Referenz | Nicht eindeutige Indexsuche, die alle Zeilen zurückgibt, die einem einzelnen Wert entsprechen | ref_or_null | Ähnlich der Abfrage des Typs „ref“, jedoch mit der zusätzlichen Abfrage für Spalten mit NULL-Werten | index_merge | Dieser Verknüpfungstyp gibt an, dass die Indexzusammenführungsoptimierungsmethode verwendet wird. | Reichweite | Indexbereichsscan, häufig verwendet in Abfragebedingungen wie zwischen, >, < | Index | FULL Index Scan Vollständiger Indexscan, der Unterschied zu ALL besteht darin, dass der Indexbaum durchlaufen wird | ALLE | VOLLSTÄNDIGER TABELLEN-Scan Vollständiger Tabellenscan, die am wenigsten effiziente Verbindungsmethode |
6. Zusätzliche Spalte
Enthält zusätzliche Informationen darüber, wie MySQL Abfragen ausführt Wert | Bedeutung |
---|
Unterscheidbar | Optimieren Sie die Distinct-Operation, um die Suche nach dem Auffinden des ersten übereinstimmenden Elements zu beenden | Existiert nicht | Verwenden Sie „not exists“, um Abfragen zu optimieren | Verwenden von Filesort | Sortieren mit zusätzlichen Operationen, normalerweise in Order-By- oder Group-By-Abfragen | Verwenden des Index | Verwenden eines abdeckenden Indexes für Abfragen | Mit temporären | MySQL muss temporäre Tabellen verwenden, um Abfragen zu verarbeiten, die beim Sortieren, bei Unterabfragen und bei Gruppierungsabfragen häufig vorkommen. | Verwenden von „where“ | Sie müssen WHERE-Bedingungen auf MySQL-Serverebene verwenden, um Daten zu filtern | Tabellen auswählen, die optimiert wurden | Der direkte Abruf von Daten über den Index ohne Zugriff auf die Tabelle ist in der Regel am effizientesten. |
7. Spalte POSSIBLE_KEYS
Gibt an, welche Indizes MySQL zur Optimierung von Abfragen verwenden kann
Indizes für Spalten, die an der Abfrage beteiligt sind, werden aufgelistet, dürfen aber nicht verwendet werden.
8. KEY-Spalte
Der vom Abfrageoptimierer tatsächlich zur Optimierung der Abfrage verwendete Index
Wenn für die Tabelle kein Index verfügbar ist, wird dieser als NULL angezeigt.
Wenn die Abfrage einen überdeckenden Index verwendet, wird der Index nur in der Schlüsselspalte angezeigt.
9. KEY_LEN-Spalte
Zeigt die Anzahl der vom MySQL-Index verwendeten Bytes an. Wenn ein gemeinsamer Index drei Spalten enthält und die Gesamtlänge der drei Spalten 100 Bytes beträgt, kann Key_len kleiner als 100 Bytes sein, z. B. 30 Bytes. Dies bedeutet, dass bei der Abfrage nicht alle Spalten des gemeinsamen Indexes verwendet werden, sondern nur die ersten ein oder zwei Spalten. - Gibt die maximal mögliche Länge des Indexfeldes an
- Die Länge von Key_len wird aus der Felddefinition berechnet, nicht aus der tatsächlichen Länge der Daten
10. Ref-Spalte
Gibt die Spalten oder Konstanten an, die von der aktuellen Tabelle bei der Abfrage über den Index im Schlüsselspaltendatensatz verwendet werden.
11. Reihen
- Gibt die Anzahl der Zeilen an, die MySQL anhand der Indexstatistiken schätzt (bei verknüpften Abfragen wird die Anzahl der Zeilen angezeigt, die für jede verschachtelte Abfrage erforderlich sind)
- Der Zeilenwert ist ein statistisches Stichprobenergebnis und nicht sehr genau.
12. Gefilterte Spalten
- Gibt den Prozentsatz der zurückgegebenen Zeilen im Verhältnis zur Anzahl der zu lesenden Zeilen an.
- Je größer der Wert der Spalte „Gefiltert“, desto besser (je größer der Wert, desto näher liegt die Anzahl der tatsächlich gelesenen Zeilen an der Anzahl der Zeilen, die zurückgegeben werden müssen).
- Der Wert der Spalte „Gefiltert“ hängt von statistischen Informationen ab, daher ist er ebenfalls nicht sehr genau und stellt lediglich einen Referenzwert dar.
3. Einschränkungen des Ausführungsplans
- Die Auswirkungen von gespeicherten Prozeduren, Triggern und UDFs auf Abfragen können nicht angezeigt werden.
- EXPLAIN kann nicht zur Analyse gespeicherter Prozeduren verwendet werden
- Frühere Versionen von MySQL unterstützten nur das Parsen von SELECT-Anweisungen.
Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:- Detaillierte Erklärung des MySQL-Ausführungsplans
- Detaillierte Analyse des Explain-Ausführungsplans in MySQL
- Detaillierte Erklärung: Die MySQL-Ausführungsplan-ID ist leer (Schlüsselwort UNION).
- So analysieren Sie den SQL-Ausführungsplan in MySQL mit EXPLAIN
- Detaillierte Erläuterung des Ausführungsplans, Beispiel für einen Befehl in MySQL
- So verwenden Sie „Explain“, um den SQL-Ausführungsplan in MySql abzufragen
- Einführung in den MySQL-Ausführungsplan
- MySQL erklärt den Ausführungsplan
- Erfahren Sie mehr über den MySQL-Ausführungsplan
|