Vorwort In MySQL können wir den Befehl EXPLAIN verwenden, um Informationen darüber zu erhalten, wie MySQL SELECT-Anweisungen ausführt, einschließlich der Art und Weise, wie Tabellen verbunden werden, und der Reihenfolge, in der sie während der Ausführung der SELECT-Anweisung verbunden werden. Im Folgenden werden die einzelnen Spalten des EXPLAIN-Befehlsergebnisses beschrieben: .select_type: gibt den Typ von SELECT an. Übliche Werte sind: |
Typ | veranschaulichen |
---|---|
EINFACH | Einfache Tabellen, keine Tabellenverknüpfungen oder Unterabfragen |
PRIMÄR | Die Hauptabfrage, also die äußere Abfrage |
UNION | Die zweite oder nachfolgende Abfrage in einer UNION |
UNTERABFRAGE | Die erste in der Unterabfrage |
.table: Tabelle des Ausgabeergebnissatzes (Tabellenalias)
.type: Gibt an, wie MySQL die erforderliche Zeile in der Tabelle findet oder den Zugriffstyp. Die gängigen Zugriffstypen sind wie folgt (von oben nach unten, Leistung von der schlechtesten zur besten):
ALLE | Vollständiger Tabellenscan |
---|---|
Index | Vollständiger Indexscan |
Reichweite | Indexbereichsscan |
Referenz | Nicht eindeutiger Indexscan |
eq_ref | Eindeutiger Index-Scan |
Konstante,System | Es gibt höchstens eine übereinstimmende Zeile in einer einzelnen Tabelle |
NULL | Es sind keine Tabellen- oder Indexscans erforderlich |
1. Typ = ALLE, vollständiger Tabellenscan, MySQL durchsucht die gesamte Tabelle, um übereinstimmende Zeilen zu finden
Im Allgemeinen gibt es keine Where-Bedingung oder die Where-Bedingung verwendet nicht die Indexabfrageanweisung
EXPLAIN SELECT * FROM Kunde WHERE aktiv=0;
2. Typ = Index, vollständiger Index-Scan. MySQL durchsucht den gesamten Index, um übereinstimmende Zeilen abzufragen, und scannt die Tabelle nicht.
Im Allgemeinen werden die Abfragefelder indiziert.
ERKLÄREN SIE, WÄHLEN SIE STORE-ID VOM KUNDEN;
3. Typ = Bereich, Indexbereichsscan, häufig verwendet für <, <=, >, >=, zwischen und andere Operationen
ERKLÄREN SIE, SELECT * FROM Kunde WHERE Kunden-ID>=10 AND Kunden-ID<=20;
Beachten Sie, dass die in diesem Fall verglichenen Felder indexiert werden müssen. Wenn kein Index vorhanden ist, führt MySQL einen vollständigen Tabellenscan durch. Im folgenden Fall ist beispielsweise das Feld create_date nicht indexiert:
EXPLAIN SELECT * FROM Kunde WHERE create_date>='2006-02-13';
4. type=ref, verwenden Sie einen nicht eindeutigen Index oder einen Präfix-Scan eines eindeutigen Indexes, um Zeilen zurückzugeben, die einem einzelnen Wert entsprechen
Das Feld store_id
hat einen normalen Index (nicht eindeutiger Index).
ERKLÄREN SIE: SELECT * FROM Kunde WHERE store_id=10;
Ref-Typen kommen auch häufig in Join-Operationen vor:
Fragen Sie die Kunden- und Zahlungstabellen mit den zugehörigen Feldern customer.customer_id
(Primärschlüssel) und payment.customer_id
(nicht eindeutiger Index) ab. Beim Abfragen von Tabellenzuordnungen muss eine Tabelle vollständig gescannt werden. Diese Tabelle muss die Tabelle mit der geringsten Anzahl von Datensatzzeilen unter den Tabellen sein. Anschließend werden die übereinstimmenden Zeilen in anderen verknüpften Tabellen über nicht eindeutige Indizes gefunden, um die Mindestanzahl gescannter Zeilen zu erreichen, wenn die Tabellen verknüpft sind.
Da die Kundentabelle die geringste Zeilenanzahl in den Kunden- und Zahlungstabellen aufweist, wird die Kundentabelle vollständig gescannt und die Zahlungstabelle sucht über einen nicht eindeutigen Index nach übereinstimmenden Zeilen.
EXPLAIN SELECT * FROM Kunde Kunde INNER JOIN Zahlung Zahlung ON Kunde.Kunden-ID = Zahlung.Kunden-ID;
5. type=eq_ref, ähnlich wie ref, außer dass der verwendete Index ein eindeutiger Index ist. Für jeden Indexschlüsselwert gibt es nur einen übereinstimmenden Datensatz in der Tabelle.
eq_ref erscheint normalerweise, wenn mehrere Tabellen verknüpft sind und der Primärschlüssel oder ein eindeutiger Index als Verknüpfungsbedingung verwendet wird.
Die Assoziationsabfrage der Tabellen „Film“ und „Filmtext“ ist grundsätzlich dieselbe wie die im vorherigen Punkt erwähnte, mit der Ausnahme, dass die Assoziationsbedingung von einem nicht eindeutigen Index in einen Primärschlüssel geändert wird.
EXPLAIN SELECT * FROM Film Film INNER JOIN Filmtext Filmtext ON Film.Film_ID = Filmtext.Film_ID;
6. Typ = const/System: In einer einzelnen Tabelle gibt es höchstens eine übereinstimmende Zeile, und die Abfrage ist sehr schnell, sodass die Werte anderer Spalten dieser übereinstimmenden Zeile vom Optimierer in der aktuellen Abfrage als Konstanten behandelt werden können.
const/system erscheint in Abfragen basierend auf dem Primärschlüssel oder einem eindeutigen Index
Abfrage basierend auf dem Primärschlüssel:
ERKLÄREN SIE, SELECT * FROM Kunde WHERE Kunden-ID =10;
Abfrage basierend auf eindeutigem Index:
EXPLAIN SELECT * FROM Kunde WHERE E-Mail = '[email protected]';
7. Typ=NULL, MySQL kann das Ergebnis direkt abrufen, ohne auf die Tabelle oder den Index zuzugreifen.
.possible_keys: gibt den Index an, der für die Abfrage verwendet werden kann
.key: Der tatsächlich verwendete Index
.key_len: Die Länge des verwendeten Indexfeldes
.ref: Welche Spalte oder Konstante zusammen mit dem Schlüssel verwendet werden soll, um Zeilen aus der Tabelle auszuwählen.
.rows: Die Anzahl der gescannten Zeilen
.gefiltert: Der Prozentsatz der Anzahl der Datensätze, die die Abfrage erfüllen, nachdem die vom Speicher-Engine zurückgegebenen Daten auf Serverebene gefiltert wurden.
.Extra: Beschreibung und Beschreibung der Ausführung, einschließlich zusätzlicher Informationen, die nicht zur Anzeige in anderen Spalten geeignet sind, aber für den Ausführungsplan sehr wichtig sind
Die drei wichtigsten sind:
Verwenden des Index | Zeigt die Indexabdeckung an, es wird keine Tabellenabfrage durchgeführt |
---|---|
Verwenden von „Where“ | Zeigt an, dass eine Tabellenabfrage durchgeführt wurde |
Verwenden der Indexbedingung | Zeigt an, dass eine ICP-Optimierung durchgeführt wurde |
Flesort verwenden | Zeigt an, dass MySQL zusätzliche Sortiervorgänge erfordert und den Sortiereffekt nicht durch die Indexreihenfolge erzielen kann |
Was ist ICP?
MySQL 5.6 führte die Index Condition Pushdown (ICP)-Funktion ein, um Abfragen weiter zu optimieren. Pushdown bedeutet, dass Vorgänge dezentralisiert werden und in einigen Fällen bedingte Filtervorgänge auf die Speicher-Engine dezentralisiert werden.
EXPLAIN SELECT * FROM Miete WHERE Mietdatum='2005-05-25' AND Kunden-ID>=300 AND Kunden-ID<=400;
Vor Version 5.6:
Der Optimierer verwendet zunächst den zusammengesetzten Index idx_rental_date, um die Datensätze herauszufiltern, die die Bedingung rental_date='2005-05-25'
erfüllen, kehrt dann zur Tabelle zurück, um die Datensätze basierend auf dem zusammengesetzten Index idx_rental_date abzurufen, und filtert schließlich die endgültigen Abfrageergebnisse basierend auf den Bedingungen customer_id>=300 AND customer_id<=400
heraus (abgeschlossen auf der Serviceebene).
Nach Version 5.6:
MySQL verwendet ICP, um Abfragen weiter zu optimieren. Während des Abrufs werden die Bedingungen customer_id>=300 AND customer_id<=400
auch an die Speicher-Engine-Ebene weitergeleitet, um die Filterung abzuschließen, wodurch unnötige IO-Zugriffe reduziert werden können. Wenn „Extra“ Using index condition
steht, bedeutet dies, dass die ICP-Optimierung verwendet wird.
siehe
MySQL in einfachen Worten
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.
<<: So erstellen Sie schnell einen FTP-Dateidienst mit FileZilla
>>: Wie implementiert Vue die Kommunikation zwischen Komponenten?
Inhaltsverzeichnis 1. Definition und Aufruf des K...
Ich habe im Internet nach dreistufigen Verknüpfun...
CSS fügt dem div Scrollen hinzu und verbirgt die ...
Die von mir verwendete VMware Workstation Pro-Ver...
Herunterladen und installierenUmgebungsvariablen ...
1. Verwenden Sie xshell, um eine Verbindung mit d...
Inhaltsverzeichnis 1. Einleitung 2. Szenario 3. S...
Inhaltsverzeichnis 1. Laden Sie die virtuelle Mas...
Thema Heute werde ich Ihnen zeigen, wie Sie mit C...
Vorwort Node wird als mittlere Schicht im Projekt...
Kontroverse um Nofollow Zwischen Zac und Guoping ...
Sublimieren Sublime Text ist ein Code-Editor (Sub...
1. Grundlegende Spezifikationen (1) Es muss die I...
Dieser Artikel erläutert anhand eines konkreten B...
1. Problembeschreibung Aus bestimmten Gründen ist...