Detaillierte Analyse von MySQL-Ausführungsplänen

Detaillierte Analyse von MySQL-Ausführungsplänen

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

<<:  Lösung für das Problem, dass VMware Workstation Pro aufgrund eines Win10-Updates nicht geöffnet werden kann

>>:  Eine kurze Diskussion über JS-Prototypen und Prototypenketten

Artikel empfehlen

9 superpraktische CSS-Tipps, die Designern und Entwicklern helfen

Im Kopf eines Webdesigners muss viel Wissen im Zus...

Praktische Methode zum Löschen einer Zeile in einer MySql-Tabelle

Zunächst müssen Sie bestimmen, welche Felder oder...

JavaScript zum Implementieren einer zeitlich begrenzten Flash-Sale-Funktion

In diesem Artikel wird der spezifische JavaScript...

HTML-Tabellen-Markup-Tutorial (43): VALIGN-Attribut der Tabellenüberschrift

In vertikaler Richtung können Sie die Ausrichtung...

Windows Server 2008-Tutorial zur Überwachung der Serverleistung

Als Nächstes erfahren Sie, wie Sie die Serverleis...

JavaScript, um den Effekt des Klickens auf das Untermenü zu erzielen

In diesem Artikel wird der spezifische JavaScript...

Detaillierte Schritte zum Erstellen einer React-Anwendung mit einer Rails-API

Inhaltsverzeichnis Backend: Rails API-Teil Front-...

Softwaretests – MySQL (VI: Datenbankfunktionen)

1.MySQL-Funktionen 1. Mathematische Funktionen PI...

Detaillierte Erklärung zu Drag-Time und Drag-Case in JavaScript

Inhaltsverzeichnis DragEvent-Schnittstelle Übersi...

Ubuntu kompiliert Kernelmodule und der Inhalt wird im Systemprotokoll angezeigt

Inhaltsverzeichnis 1.Linux-Anmeldeschnittstelle 2...

Natives js imitiert die Pulldown-Aktualisierung eines Mobiltelefons

In diesem Artikel wird der spezifische Code von j...