Detaillierte Erklärung des EXPLAIN-Befehls und seiner Verwendung in MySQL

Detaillierte Erklärung des EXPLAIN-Befehls und seiner Verwendung in MySQL

1. Szenariobeschreibung: Mein Kollege hat mir gezeigt, wie man „Explain“ in MySQL verwendet, also habe ich die Bedeutung des zurückgegebenen Inhalts überprüft.

2. Nun werden die Nutzinhalte wie folgt erfasst:

1. EXPLAIN zeigt, wie MySQL Indizes verwendet, um Auswahlanweisungen zu verarbeiten und Tabellen zu verknüpfen. Es kann dabei helfen, bessere Indizes auszuwählen und optimiertere Abfrageanweisungen zu schreiben.

Um es zu verwenden, fügen Sie einfach „explain“ vor der Select-Anweisung hinzu:

erklären Sie select count(DISTINCT uc_userid) als user_login aus user_char_daily_gameapp_11, wobei uc_date >= "2017-09-04" und uc_date<="2017-09-08" AND uc_date >= "2017-06-01" LIMIT 1

2. Erklärung zur Spalte EXPLAIN:

Tabelle: Zeigt an, um welche Tabelle es sich bei den Daten in dieser Zeile handelt

Typ: Dies ist die wichtige Spalte und zeigt, welche Art von Verbindung verwendet wird. Die Join-Typen vom besten zum schlechtesten sind const, eq_reg, ref, range, indexhe und ALL

Possible_keys: Zeigt die Indizes an, die auf diese Tabelle angewendet werden können. Wenn leer, ist kein Index möglich. Sie können für das jeweilige Feld eine entsprechende Anweisung aus der WHERE-Klausel auswählen.

Schlüssel: Der tatsächlich verwendete Index. Wenn NULL, wird kein Index verwendet. In seltenen Fällen wählt MySQL einen nicht ausreichend optimierten Index. In diesem Fall können Sie USE INDEX (Indexname) in der SELECT-Anweisung verwenden, um die Verwendung eines Indexes zu erzwingen, oder IGNORE INDEX (Indexname) verwenden, um MySQL zu zwingen, den Index zu ignorieren.

key_len: Die Länge des verwendeten Indexes. Je kürzer die Länge, desto besser, ohne an Genauigkeit zu verlieren.

ref: zeigt an, welche Spalte des Index verwendet wird, wenn möglich eine Konstante

Zeilen: Die Anzahl der Zeilen, die MySQL für notwendig hält, um die angeforderten Daten zurückzugeben

Extra: Zusätzliche Informationen darüber, wie MySQL die Abfrage analysiert. Dies wird in Tabelle 4.3 erläutert. Die hier zu sehenden schlechten Beispiele sind jedoch die Verwendung der temporären Methode und die Verwendung der Dateisortierung. Dies bedeutet, dass MySQL den Index überhaupt nicht verwenden kann, was zu langsamen Abrufen führt.

3. Die Bedeutung der von der zusätzlichen Spalte zurückgegebenen Beschreibung

Eindeutig: Sobald MySQL eine Zeile findet, die mit der Zeile übereinstimmt, wird die Suche beendet.

Existiert nicht: MySQL optimiert LEFT JOIN. Sobald es eine Zeile findet, die den LEFT JOIN-Kriterien entspricht, wird nicht mehr gesucht.

Für jeden Datensatz geprüfter Bereich (Indexzuordnung: #): Es wurde kein idealer Index gefunden, daher prüft MySQL für jede Zeilenkombination aus der vorherigen Tabelle, welcher Index verwendet werden soll, und verwendet ihn, um Zeilen aus der Tabelle zurückzugeben. Dies ist eine der langsamsten Verbindungen über den Index

Filesort verwenden: Wenn Sie dies sehen, muss die Abfrage optimiert werden. MySQL muss einen zusätzlichen Schritt ausführen, um herauszufinden, wie die zurückgegebenen Zeilen sortiert werden. Es hängt von der Verbindungsart und

Sortieren Sie alle Zeilen, indem Sie den Sortierschlüsselwert und die Zeilenzeiger auf alle Zeilen speichern, die der Bedingung entsprechen.

Index verwenden: Spaltendaten werden aus der Tabelle zurückgegeben, indem nur die Informationen im Index verwendet werden, ohne dass diese tatsächlich gelesen werden. Dies geschieht, wenn alle angeforderten Spalten für die Tabelle Teil desselben Index sind.

Temporäre Verwendung. Wenn Sie dies sehen, muss die Abfrage optimiert werden. Hier muss MySQL eine temporäre Tabelle zum Speichern der Ergebnisse erstellen. Dies geschieht normalerweise, wenn ORDER BY statt GROUP BY auf verschiedene Spaltensätze angewendet wird.

Wo verwendet: Die WHERE-Klausel wird verwendet, um einzuschränken, welche Zeilen mit der nächsten Tabelle abgeglichen oder an den Benutzer zurückgegeben werden. Wenn Sie nicht alle Zeilen der Tabelle zurückgeben möchten und der Verbindungstyp

ALL oder Index, dies wird passieren, oder es liegt ein Problem mit der Abfrage vor. Erklärung der verschiedenen Verbindungstypen (sortiert nach Effizienz)

Die Systemtabelle hat nur eine Zeile: Systemtabelle. Dies ist ein Sonderfall des const-Verbindungstyps

const: Der Maximalwert eines Datensatzes in der Tabelle, der dieser Abfrage entsprechen kann (der Index kann ein Primärschlüssel oder ein eindeutiger Index sein). Da es nur eine Zeile gibt, ist dieser Wert eigentlich eine Konstante, denn

MySQL liest zuerst den Wert und behandelt ihn dann als Konstante.

eq_ref: Bei einem Join liest MySQL für jeden Datensatz im Join einen Datensatz aus der vorherigen Tabelle. Dabei wird der Index als Primärschlüssel oder eindeutiger Schlüssel in der Abfrage verwendet.

Alle Nutzungsmöglichkeiten mit einem Klick

ref: Dieser Verknüpfungstyp tritt nur auf, wenn die Abfrage einen Schlüssel verwendet, der kein eindeutiger oder Primärschlüssel ist oder Teil eines dieser Typen ist (z. B. bei Verwendung eines ganz linken Präfixes). Für die vorherige Tabelle

Bei jedem Zeilenjoin werden alle Datensätze aus der Tabelle gelesen. Dieser Typ hängt stark davon ab, wie viele Datensätze mit dem Index abgeglichen werden – je weniger, desto besser.

Bereich: Dieser Verknüpfungstyp verwendet einen Index, um einen Zeilenbereich zurückzugeben, z. B. wenn Sie > oder < verwenden, um etwas zu finden.

Index: Dieser Verknüpfungstyp führt einen vollständigen Scan aller Datensätze in der vorherigen Tabelle durch (besser als ALLE, da der Index im Allgemeinen kleiner als die Tabellendaten ist).

ALLE: Dieser Verknüpfungstyp führt einen vollständigen Scan aller vorherigen Datensätze durch. Dies ist im Allgemeinen schlecht und sollte vermieden werden.

Zusammenfassen

Oben finden Sie eine ausführliche Erklärung des EXPLAIN-Befehls und seiner Verwendung in MySQL. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht.

Das könnte Sie auch interessieren:
  • Detaillierte Analyse der Erläuterung bei der MySQL-Abfrageoptimierung
  • Detaillierte Erklärung der Verwendung von Explain in MySQL
  • MySQL-Zusammenfassung erklären
  • MySQL-Leistungsanalyse und Erläuterung der Verwendungsanweisungen
  • Detaillierte Erklärung der Rolle von Explain in MySQL
  • Detaillierte Erläuterung der Verwendung von MySQL Explain (Analyseindex)
  • Detaillierte Erläuterung des Ausführungsplans, Beispiel für einen Befehl in MySQL
  • MySQL erklärt den Ausführungsplan
  • Detaillierte Erklärung des EXPLAIN-Befehls in MySQL
  • EXPLAIN-Anweisung und Verwendungsbeispiele in MySQL

<<:  So verwenden Sie crontab zum Hinzufügen geplanter Aufgaben in Linux

>>:  Vor- und Nachteile von React Hooks

Artikel empfehlen

Verwendung des Linux-Befehls bzip2

1. Befehlseinführung bzip2 wird zum Komprimieren ...

Beispiel für die Implementierung einer kaskadierenden MySQL-Replikation

Bei der sogenannten kaskadierenden Replikation sy...

Detaillierte Erklärung der Methoden des fs-Moduls und des Path-Moduls in Node.js

Überblick: Das Dateisystemmodul ist ein einfacher...

So installieren Sie Oracle Java 14 auf Ubuntu Linux

Vor Kurzem hat Oracle die öffentliche Verfügbarke...

Lösen Sie das Matching-Problem in CSS

Problembeschreibung Wie wir alle wissen, wird bei...

Eintauchen in die JS-Vererbung

Inhaltsverzeichnis Vorwort Vorbereiten Zusammenfa...

Implementierung der Docker Compose-Mehrcontainerbereitstellung

Inhaltsverzeichnis 1. WordPress-Bereitstellung 1....

Informationen zur Installation des Python3.8-Images im Docker

Offizielle Docker Hub-Website 1. Suchen Sie nach ...

Lösen Sie das Installationsproblem von Linux Tensorflow2.0

conda aktualisieren conda pip installieren tf-nig...

Tipps zum Anzeigen von Text in Linux (super praktisch!)

Vorwort Bei der täglichen Entwicklung müssen wir ...