Verwendung und Analyse des Mysql Explain-Befehls

Verwendung und Analyse des Mysql Explain-Befehls

Mit dem Befehl „mysql explain“ wird gezeigt, wie MySQL Indizes zum Verarbeiten von Auswahlanweisungen und Verknüpfen von Tabellen verwendet. Mit diesem Befehl können Sie den Leistungsengpass von Abfrageanweisungen oder Tabellenstrukturen analysieren, um SQL-Anweisungen mit besserer Leistung zu schreiben. Mit dem Befehl expalin erhalten Sie:

  • 1. Lesereihenfolge der Tabelle
  • 2. Operationstyp der Tabellenleseoperation
  • 3. Welche Indizes können verwendet werden?
  • 4. Welche Indizes werden tatsächlich verwendet?
  • 5. Verweise zwischen Tabellen
  • 6. Wie viele Zeilen jeder Tabelle werden vom Optimierer abgefragt?

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

Erklären Sie „Select * Form Codetc“;

Sie erhalten ein Ergebnis wie dieses:

Nachfolgend erläutern wir kurz die Spalte „Ergebnis erklären“:

id: Die Ausführungsreihenfolgekennung der Anweisung.

  • select_type: SELECT-Typ, der einer der folgenden sein kann.
  • einfach -- bedeutet keine Unterabfragen und Vereinigungen
  • Unterabfrage --Unterabfrage
  • Abgeleitete --temporäre Tabelle
  • Union
  • Vereinigungsergebnis - Vereinigung von Ergebnissen

Bei der tatsächlichen Entwicklung sollten Unterabfragen so wenig wie möglich verwendet und durch Joins vervollständigt werden.

Tabelle : Zeigt an, um welche Tabelle es sich in dieser Datenzeile handelt, d. h. den Tabellennamen.

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

Possible_keys : Zeigt die möglichen Indizes, 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 zu verwendenden Indexes. Je kürzer die Länge, desto besser, ohne an Genauigkeit zu verlieren.

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

Zeilen : Die Anzahl der Zeilen, die MySQL für notwendig erachtet, 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.

Die Bedeutung der Beschreibung, die in der zusätzlichen Spalte zurückgegeben wird

Distinct : Sobald MySQL eine Zeile findet, die mit der Zeile im Join übereinstimmt, wird nicht weiter gesucht.

Existiert nicht : MySQL optimiert LEFT JOIN. Sobald es eine Zeile findet, die den LEFT JOIN-Kriterien entspricht, wird nicht weiter 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 mit Indizes.

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 sortiert alle Zeilen basierend auf dem Verknüpfungstyp und speichert den Sortierschlüsselwert und die Zeilenzeiger für alle Zeilen, 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.

Verwendungsbereich: Mit der WHERE-Klausel wird eingeschränkt, welche Zeilen mit der nächsten Tabelle abgeglichen oder an den Benutzer zurückgegeben werden. Dies kann passieren, wenn Sie nicht alle Zeilen in der Tabelle zurückgeben möchten und der Verknüpfungstyp ALL oder Index ist oder wenn ein Problem mit der Abfrage vorliegt. Erklärung der verschiedenen Verknüpfungstypen (sortiert nach Effizienz)

System : Die Tabelle hat nur eine Zeile: die Systemtabelle. Dies ist ein Sonderfall von konstanten Verbindungstypen.

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 nur eine Zeile vorhanden ist, ist dieser Wert tatsächlich eine Konstante, da MySQL den Wert zuerst liest und ihn dann als Konstante behandelt.

eq_ref : Bei einer Verbindung liest MySQL bei der Abfrage für jede Datensatzvereinigung einen Datensatz aus der vorherigen Tabelle. Wird verwendet, wenn die Abfrage einen Index als Primärschlüssel oder eindeutigen Schlüssel verwendet.

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). Bei jedem Zeilenjoin mit den vorherigen Tabellen 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 normalerweise kleiner als die Tabellendaten ist).

ALLE : Dieser Verknüpfungstyp führt einen vollständigen Scan jedes Datensatzes in Verbindung mit dem vorherigen durch, was im Allgemeinen schlecht ist und vermieden werden sollte.

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. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • MySQL-Leistungsanalyse und Erläuterung der Verwendungsanweisungen
  • Detaillierte Erläuterung der Verwendung von MySQL Explain (Analyseindex)
  • So verwenden Sie „Explain“, um den SQL-Ausführungsplan in MySql abzufragen
  • MySQL ermöglicht langsame Abfragen (Einführung in die Verwendung der EXPLAIN-SQL-Anweisung)
  • Verwendung von MySQL-Explain (verwenden Sie Explain, um Abfrageanweisungen zu optimieren)
  • Einführung in die Verwendung von Explain, einem MySQL-Optimierungstool
  • Grundlegende Nutzungsanalyse von Explain, einem magischen Tool zur MySQL-Leistungsoptimierung
  • MySQL-Experiment: Verwenden von Explain zur Analyse des Indextrends
  • Detaillierte Erklärung von MySQL Explain
  • Grundlegendes Tutorial zur Verwendung der Explain-Anweisung in MySQL

<<:  web.config (IIS) und .htaccess (Apache) Konfiguration

>>:  Realisieren Sie eine dreistufige Verknüpfung von Jahr, Monat und Tag basierend auf JavaScript

Artikel empfehlen

So installieren Sie Linux Flash

So installieren Sie Flash unter Linux 1. Besuchen...

So verwenden Sie html2canvas, um HTML-Code in Bilder umzuwandeln

Konvertieren Sie Code in ein Bild mit html2canvas...

Allgemeiner Hinweis zum MySQL-Ereignisplaner (unbedingt lesen)

Überblick MySQL verfügt auch über einen eigenen E...

Vue verwendet E-Charts, um ein Organigramm zu zeichnen

Gestern habe ich einen Blog über den kreisförmige...

Detaillierte Erklärung der Docker-Maschinennutzung

Docker-Machine ist ein offiziell von Docker berei...

So migrieren Sie das Datenverzeichnis in Docker

Inhaltsverzeichnis Datenträgernutzung anzeigen Da...

Analyse der Protokolldateien im Tomcat-Protokollverzeichnis (Zusammenfassung)

Bei jedem Start von Tomcat werden die folgenden P...

WeChat-Applet implementiert Sortierfunktion basierend auf Datum und Uhrzeit

Ich habe vor kurzem ein kleines Programmierprojek...

Implementierung eines einfachen Karussells auf Basis von JavaScript

In diesem Artikel wird der spezifische JavaScript...

Analyse des Quellcodes des React-Ereignismechanismus

Inhaltsverzeichnis Prinzip Quellcodeanalyse Deleg...

CentOS6.8 verwendet cmake zur Installation von MySQL5.7.18

Unter Bezugnahme auf die Online-Informationen hab...

Implementierung der Installation und Deinstallation von CUDA und CUDNN in Ubuntu

Inhaltsverzeichnis Vorwort Installieren des Grafi...