Empfohlenes Lernen: MySQL-Video-Tutorial
Verwenden Sie das Schlüsselwort EXPLAIN, um die Ausführung von SQL-Abfrageanweisungen durch den Optimierer zu simulieren, um zu erfahren, wie MySQL Ihre SQL-Anweisungen verarbeitet, und um Leistungsengpässe bei Ihren Abfrageanweisungen oder Tabellenstrukturen zu analysieren.
Die wichtigsten Felder sind: ID, Typ, Schlüssel, Zeilen, Extra
Wählen Sie die Sequenznummer der Abfrage aus, einschließlich einer Reihe von Zahlen. Gibt die Reihenfolge an, in der ausgewählte Klauseln oder Operationstabellen in der Abfrage ausgeführt werden 2. Unterschiedliche IDs: Wenn es sich um eine Unterabfrage handelt, erhöht sich die Seriennummer der ID, desto höher ist die Priorität und desto früher wird die ID ausgeführt gleich, aber unterschiedlich (beide Situationen existieren gleichzeitig)
: Wenn die ID gleich ist, kann sie als Gruppe betrachtet werden. Je größer der ID-Wert, desto höher Priorität, desto früher wird sie ausgeführtselect_type
Der Typ der Abfrage, der hauptsächlich zur Unterscheidung von gewöhnlichen Abfragen, gemeinsamen Abfragen und Unterabfragen sowie anderen komplexen Abfragen verwendet wird
1. SIMPLE: Einfache Auswahlabfrage, die Die Abfrage enthält keine Unterabfragen oder Unions
2. PRIMARY
: Die Abfrage enthält alle komplexen Unterteile und die äußerste Abfrage ist als „Für primär“ markiert3, SUBQUERY
: Eine Unterabfrage ist in der Select- oder Where-Liste enthalten4, DERIVED
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
Hinweis: ALLER vollständiger Tabellenscan der Tabelle mit den wenigsten Datensätzen wie t1-Tabelle
4, Ref: nicht eindeutiger Indexscan, gibt alle Zeilen zurück, die einem einzelnen Wert entsprechen. Im Wesentlichen handelt es sich auch um einen Indexzugriff, der alle Zeilen zurückgibt, die einem einzelnen Wert entsprechen. Es können jedoch mehrere Zeilen gefunden werden, die den Kriterien entsprechen, daher sollte es sich um eine Mischung aus Suche und Scan handeln
5. Bereich: Rufen Sie nur Zeilen in einem bestimmten Bereich ab und verwenden Sie einen Index, um Zeilen auszuwählen. Die Schlüsselspalte zeigt, welcher Index verwendet wird. Im Allgemeinen erscheinen Abfragen wie between, , in usw. in der where-Anweisung. Dieser Bereichsscan für Indexspalten ist besser als ein vollständiger Indexscan. Es muss nur an einem bestimmten Punkt beginnen und an einem anderen Punkt enden, ohne den gesamten Index zu scannen
6: Der Unterschied zwischen Index und ALL besteht darin, dass der Indextyp nur den Index durchläuft Baum. Dies sind normalerweise ALLE Blöcke, da Indexdateien normalerweise kleiner sind als Datendateien. (Obwohl Index und ALL beide die gesamte Tabelle lesen, wird der Index vom Index gelesen, während ALL von der Festplatte gelesen wird.)
7: Vollständiger Tabellenscan, Durchsuchen der gesamten Tabelle, um die Übereinstimmung zu finden Wenn in der Zeile
possible_keys
key
key_len
ref
Zeilen
Extra
1. Verwenden von Filesort:
MySQL verwendet einen externen Index, um die Daten zu sortieren, anstatt sie nach dem Index in der Tabelle zu sortieren und zu lesen. Mit anderen Worten, MySQL kann den Index nicht verwenden, um den Sortiervorgang als „Dateisortierung“ abzuschließen
Da der Index zuerst nach E-Mail und dann nach Adresse sortiert wird, kann der Index nicht erfüllt werden, wenn Sie während der Abfrage direkt nach Adresse sortieren die Anforderungen. MySQL muss die „Dateisortierung“ erneut implementieren
2. Verwendung temporärer Tabellen:Verwenden Sie temporäre Tabellen, um Zwischenergebnisse zu speichern, was bedeutet, dass MySQL temporäre Tabellen verwendet, wenn die Abfrageergebnisse sortiert werden, was in der Reihenfolge nach und üblich ist Gruppieren nach
3. Mit Index:bedeutet, dass die entsprechende Auswahloperation einen
abdeckenden Index(Covering Index) verwendet, der den Zugriff auf die Datenzeilen der Tabelle vermeidet und sehr effizient ist Bei Verwendung Wo gleichzeitig angezeigt wird, bedeutet dies, dass der Index zur Suche nach Indexschlüsselwerten verwendet wird (siehe Abbildung oben).
Wenn gleichzeitig Wo verwenden angezeigt wird, bedeutet dies, dass der Index zum Lesen von Daten verwendet wird Anstatt Suchvorgänge durchzuführen
Covering Index(Covering Index): Auch Indexabdeckung genannt. Es handelt sich um die Felder in der Auswahlliste, die nur aus dem Index abgerufen werden können. Es ist nicht erforderlich, die Datendatei erneut gemäß dem Index zu lesen. Mit anderen Worten, die Abfragespalte muss durch den erstellten Index abgedeckt werden. Hinweis:
a. Wenn Sie einen abdeckenden Index verwenden müssen, entfernen Sie nur die erforderlichen Spalten aus den Feldern in der Auswahlliste. Verwenden Sie nicht select *b wird zu groß sein, was die grobe Leistung verringert.Wert der Where-Klausel Es ist immer falsch und kann nicht verwendet werden, um Vorfahren zu erhalten
7 Wegoptimierte Tabellen auswählen:
In Ermangelung einer Group-By-Klausel optimieren Sie MIN/. MAX-Operationen basierend auf dem Index oder optimieren COUNT für die MyISAM-Speicher-Engine (*)-Operation, Sie müssen nicht auf die Ausführungsphase warten, um Berechnungen durchzuführen, die Optimierung kann während der Phase der Abfrageausführungsplangenerierung abgeschlossen werden8 . eindeutig:
Optimieren Sie den eindeutigen Vorgang und hören Sie auf, nach demselben zu suchen, nachdem Sie den ersten passenden Vorfahren gefunden haben. Die Aktion lohnt sich1 (id = 4), [select id, name from t2]: select_type ist eine Union, was angibt, dass die Auswahl mit der ID = 4 die zweite Auswahl in der Union ist.
2 (id = 3), [select id, name from t1 where address = '11']: Da es sich um eine in der from-Anweisung enthaltene Unterabfrage handelt, wird sie als DERIVED (abgeleitet) markiert, wobei Adresse = '11' bestanden Der zusammengesetzte Index idx_name_email_address kann abgerufen werden, daher ist der Typ index.
3 (id = 2), [select id from t3]: Da es sich um eine in select enthaltene Unterabfrage handelt, wird sie als SUBQUERY markiert.
4 (id = 1), [select d1.name, … d2 from … d1]: select_type ist PRIMARY, was darauf hinweist, dass die Abfrage die äußerste Abfrage ist, und die Tabellenspalte ist als „derived3“ markiert, was darauf hinweist, dass die Abfrage Die Ergebnisse stammen aus einer abgeleiteten Tabelle (wählen Sie das Ergebnis für ID = 3 aus).
5 (id = NULL), [ ... Union ... ]: Stellt die Phase des Lesens von Zeilen aus der temporären Tabelle der Union dar. „Union 1, 4“ in der Tabellenspalte bedeutet die Verwendung der ausgewählten Ergebnisse von id=1 und id=4. Union-Operation.
Empfohlenes Lernen: MySQL-Video-Tutorial
Das obige ist der detaillierte Inhalt vonSo zeigen Sie den Ausführungsplan in MySQL an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!