Erfahren Sie mehr über den MySQL-Ausführungsplan

Erfahren Sie mehr über den MySQL-Ausführungsplan

1. Einführung in den Implementierungsplan

Ein Ausführungsplan bezieht sich auf die spezifische Ausführungsmethode einer SQL-Anweisung, nachdem sie vom MySQL-Abfrageoptimierer optimiert wurde. MySQL stellt uns die EXPLAIN-Anweisung zur Verfügung, um relevante Informationen über den Ausführungsplan zu erhalten. Es ist zu beachten, dass die EXPLAIN-Anweisung die zugehörigen Anweisungen nicht tatsächlich ausführt, sondern die Anweisungen über den Abfrageoptimierer analysiert, die optimale Abfragelösung findet und die entsprechenden Informationen anzeigt.

Ausführungspläne werden normalerweise in der SQL-Leistungsanalyse, -Optimierung und anderen Szenarien verwendet. Durch die Erläuterung der Ergebnisse können Sie Informationen wie die Abfragereihenfolge von Datentabellen, den Operationstyp von Datenabfrageoperationen, welche Indizes getroffen werden können, welche Indizes tatsächlich getroffen werden und wie viele Datensatzzeilen in jeder Datentabelle abgefragt werden, erfahren.

Erläutern Sie, dass Ausführungspläne die Anweisungen SELECT, DELETE, INSERT, REPLACE und UPDATE unterstützen. Wir verwenden es im Allgemeinen, um ausgewählte Abfrageanweisungen zu analysieren.

2. Ausführungsplan in der Praxis

Werfen wir einen kurzen Blick auf den Ausführungsplan für die nächste Abfrageanweisung:

mysql> erklären Sie SELECT * FROM dept_emp WHERE emp_no IN (SELECT emp_no FROM dept_emp GROUP BY emp_no HAVING COUNT(emp_no)>1);
+----+----------+----------+---------+---------+-------+-----------------+---------+---------+---------+----------+----------+-------------+
| ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra |
+----+----------+----------+---------+---------+-------+-----------------+---------+---------+---------+----------+----------+-------------+
| 1 | PRIMARY | dept_emp | NULL | ALL | NULL | NULL | NULL | NULL | 331143 | 100,00 | Verwenden von „where“ |
| 2 | UNTERABFRAGE | dept_emp | NULL | Index | PRIMARY,dept_no | PRIMARY | 16 | NULL | 331143 | 100,00 | Index wird verwendet |
+----+----------+----------+---------+---------+-------+-----------------+---------+---------+---------+----------+----------+-------------+

Wie Sie sehen, gibt es in den Ausführungsplanergebnissen 12 Spalten. Die Bedeutung der einzelnen Spalten ist in der folgenden Tabelle zusammengefasst:

Spaltenname

Bedeutung

Ausweis

Sequenzkennung für SELECT-Abfragen

Wählen Sie Typ

Der Abfragetyp, der dem Schlüsselwort SELECT entspricht

Tisch

Der verwendete Tabellenname

Partitionen

Die passende Partition. Für nicht partitionierte Tabellen ist der Wert NULL

Typ

Tabellenzugriffsmethoden

mögliche Schlüssel

Mögliche Indizes

Schlüssel

Der tatsächlich verwendete Index

Schlüssellänge

Die Länge des ausgewählten Indexes

Referenz

Bei Verwendung einer Indexgleichheitsabfrage die Spalte oder Konstante, die mit dem Index verglichen werden soll

Reihen

Geschätzte Anzahl der zu lesenden Zeilen

Filtern nach

Der Prozentsatz der Datensätze, die nach dem Filtern nach Tabellenbedingungen erhalten bleiben

Extra

Weitere Informationen

Schauen wir uns einige wichtige Spalten im Ausführungsplan an:

Ausweis:

SELECT-Kennung. Dies ist die Ordnungszahl des SELECT in der Abfrage. Der Wert kann NULL sein, wenn die Zeile auf das Vereinigungsergebnis anderer Zeilen verweist. Wenn die IDs gleich sind, erfolgt die Ausführungsreihenfolge von oben nach unten. Wenn die IDs 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.

Typ auswählen:

Der Typ der Abfrage. Übliche Werte sind:

  • SIMPLE: Einfache Abfrage, enthält keine UNION oder Unterabfrage.
  • PRIMARY: Wenn die Abfrage Unterabfragen oder andere Teile enthält, wird die äußere SELECT-Anweisung als PRIMARY gekennzeichnet.
  • UNTERABFRAGE: Die erste Auswahl in einer Unterabfrage.
  • UNION: In einer UNION-Anweisung das SELECT, das nach UNION erscheint.
  • ABGELEITET: Unterabfragen, die in FROM erscheinen, werden als ABGELEITET markiert.
  • UNION-ERGEBNIS: Das Ergebnis einer UNION-Abfrage.

Tisch:

Gibt den Tabellennamen an, der für die Abfrage verwendet wird. Jede Zeile hat einen entsprechenden Tabellennamen. Neben normalen Tabellen kann der Tabellenname auch die folgenden Werte haben:

  • <unionM,N>: Diese Zeile verweist auf das UNION-Ergebnis von Zeilen mit den IDs M und N;
  • <derivedN>: Diese Zeile verweist auf das abgeleitete Tabellenergebnis, das von der Tabelle mit der ID N generiert wurde. Es ist möglich, dass aus einer Unterabfrage in der FROM-Klausel eine abgeleitete Tabelle erstellt wird.
  • <subqueryN>: Diese Zeile verweist auf das materialisierte Unterabfrageergebnis, das von der Tabelle mit der ID N generiert wurde.

Typ:

Der Typ der Abfrageausführung, der beschreibt, wie die Abfrage ausgeführt wird. Die Reihenfolge aller Werte vom besten zum schlechtesten ist:

System > const > eq_ref > ref > Volltext > ref_or_null > Index_Merge > eindeutige Unterabfrage > Index_Unterabfrage > Bereich > Index > ALLE

Die spezifischen Bedeutungen einiger gängiger Typen sind wie folgt:

  • System: Wenn die von der Tabelle verwendete Engine die Anzahl der Zeilen in der Tabelle genau zählt (z. B. MyISAM) und die Tabelle nur eine Zeile enthält, lautet die Zugriffsmethode „System“, was ein Sonderfall von const ist.
  • const: Es gibt höchstens eine übereinstimmende Zeile in der Tabelle, die mit einer Abfrage gefunden werden kann. Es wird häufig verwendet, um alle Felder des Primärschlüssels oder eindeutigen Index als Abfragebedingungen zu verwenden.
  • eq_ref: Beim Abfragen einer verknüpften Tabelle gibt es in der aktuellen Tabelle nur eine Zeile, die der Zeile in der vorherigen Tabelle entspricht. Es handelt sich neben System und Const um die beste Verbindungsmethode und wird häufig verwendet, um alle Felder des Primärschlüssels oder eindeutigen Index als Verbindungsbedingung zu verwenden.
  • ref: Verwenden Sie einen gemeinsamen Index als Abfragebedingung. Das Abfrageergebnis kann mehrere Zeilen finden, die die Bedingung erfüllen.
  • index_merge: Wenn die Abfragebedingung mehrere Indizes verwendet, bedeutet dies, dass die Index Merge-Optimierung aktiviert ist. In diesem Fall listet die Schlüsselspalte im Ausführungsplan die verwendeten Indizes auf.
  • range: Führt eine Bereichsabfrage für die Indexspalte aus. Die Schlüsselspalte im Ausführungsplan gibt an, welcher Index verwendet wird.
  • Index: Die Abfrage durchläuft den gesamten Indexbaum. Dies ähnelt ALL, außer dass der Index gescannt wird und sich der Index im Allgemeinen im Speicher befindet, was schneller ist.
  • ALLE: Vollständiger Tabellenscan.

mögliche Schlüssel:

Die Spalte „possible_keys“ gibt die möglichen Indizes an, die MySQL bei der Ausführung der Abfrage verwenden kann. Wenn diese Spalte NULL ist, bedeutet dies, dass kein Index vorhanden ist, der verwendet werden kann. In diesem Fall müssen Sie die in der WHERE-Klausel verwendeten Spalten überprüfen, um festzustellen, ob Sie die Abfrageleistung verbessern können, indem Sie einer oder mehreren dieser Spalten Indizes hinzufügen.

Schlüssel:

Die Schlüsselspalte gibt den tatsächlich von MySQL verwendeten Index an. Wenn NULL, wird der Index nicht verwendet.

Schlüssellänge:

Die Spalte key_len gibt die maximale Länge des von MySQL tatsächlich verwendeten Indexes an; bei Verwendung eines gemeinsamen Indexes kann es sich um die Summe der Längen mehrerer Spalten handeln. Je kürzer, desto besser, solange es den Anforderungen entspricht. Wenn die Spalte „key“ NULL anzeigt, zeigt die Spalte „key_len“ ebenfalls NULL an.

Reihen:

Die Spalte „Zeilen“ stellt eine grobe Schätzung der Anzahl der zu findenden Datensätze oder zu lesenden Zeilen basierend auf Tabellenstatistiken und Auswahlbedingungen dar. Je kleiner der Wert, desto besser.

Extra:

Diese Spalte enthält zusätzliche Informationen darüber, wie MySQL die Abfrage analysiert. Diese Informationen können Ihnen dabei helfen, genauer zu verstehen, wie MySQL die Abfrage ausführt. Gängige Werte sind:

  • Verwenden von Filesort: Zum Sortieren wird die externe Indexsortierung verwendet, und der interne Index der Tabelle wird nicht zum Sortieren verwendet.
  • Temporäre Tabelle verwenden: MySQL muss eine temporäre Tabelle erstellen, um Abfrageergebnisse zu speichern, was bei ORDER BY und GROUP BY üblich ist.
  • Index verwenden: Gibt an, dass die Abfrage einen überdeckenden Index verwendet und keine Tabellenrückgabe erfordert, sodass die Abfrageeffizienz sehr hoch ist.
  • Indexbedingung wird verwendet: Gibt an, dass der Abfrageoptimierer die Pushdown-Funktion für Indexbedingungen verwenden möchte.
  • Die Verwendung von „where:“ gibt an, dass die Abfrage die WHERE-Klausel zur bedingten Filterung verwendet. Dies tritt normalerweise auf, wenn der Index nicht verwendet wird.
  • Verwenden des Verbindungspuffers (Block Nested Loop): Dies ist eine Abfragemethode zum Verbinden von Tabellen. Wenn die getriebene Tabelle keinen Index verwendet, liest MySQL zuerst die getriebene Tabelle und legt sie in den Verbindungspuffer. Anschließend durchläuft es die getriebene Tabelle und die getriebene Tabelle für die Abfrage.

Hier eine Erinnerung: Wenn die Spalte „Extra“ „Using Filesort“ oder „Using Temporary“ enthält, kann es zu MySQL-Leistungsproblemen kommen und dies sollte so weit wie möglich vermieden werden.

Oben finden Sie ausführliche Informationen zum Erlernen des MySQL-Ausführungsplans. Weitere Informationen zum MySQL-Ausführungsplan finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung des MySQL-Ausführungsplans
  • Detaillierte Analyse des Explain-Ausführungsplans in MySQL
  • Detaillierte Analyse von MySQL-Ausführungsplänen
  • 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

<<:  Docker erstellt eine Jenkins+Maven-Plattform zum Erstellen und Bereitstellen von Code

>>:  9 großartige JavaScript-Framework-Skripte zum Zeichnen von Diagrammen im Web

Artikel empfehlen

Beschreibung der Standardtransaktionsisolationsebene von MySQL und Oracle

1. Transaktionsmerkmale (ACID) (1) Atomarität. Di...

So legen Sie den Standardwert für den Datums-/Uhrzeittyp in MySQL fest

Beim Ändern des Standarddatums-/Uhrzeitwerts über...

React antd realisiert dynamische Vergrößerung und Verkleinerung der Form

Beim Schreiben dynamischer Formulare bin ich zuvo...

Einführung in die Verschachtelungsregeln von HTML-Tags

Es gibt viele XHTML-Tags: div, ul, li, dl, dt, dd...

Vor- und Nachteile des Tabellenlayouts und warum es nicht empfohlen wird

Nachteile von Tabellen 1. Tabellen nehmen mehr Byt...

Installations-Tutorial für die komprimierte Version von MySQL 5.7.18 Archiv

In diesem Artikel wird die spezifische Methode zu...

Eingebettetes Transplantations-Docker-Fehlerproblem (Zusammenfassung)

Nach einer langen Zeit der Transplantation und In...

Beispielcode zur Implementierung von Neon-Button-Animationseffekten mit CSS3.0

Heute zeige ich Ihnen einen Neon-Button-Animation...

HTML-Tutorial: Horizontales Liniensegment in HTML

<br />Dieses Tag kann eine horizontale Linie...