„explain“ wird verwendet, um Informationen zum Abfrageausführungsplan abzurufen. 1. Grammatik Fügen Sie vor der Auswahl einfach eine Erklärung hinzu, zum Beispiel: mysql> erklären Sie Auswahl 1; +----+----------+----------+---------+------+---------------+-----------+---------+---------+------+---------+------+----------+----------------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+----------+---------+------+---------------+-----------+---------+---------+------+---------+------+----------+----------------+ | 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Keine Tabellen verwendet | +----+----------+----------+---------+------+---------------+-----------+---------+---------+------+---------+------+----------+----------------+ 2. Informationen in erklären 1. id: Gibt die Zeile an, zu der das SELECT gehört. Je größer die ID, desto höher die Ausführungsreihenfolge. Wenn die ID gleich ist, wird sie von oben nach unten ausgeführt. 2. select_type: Zeigt an, ob es sich bei der entsprechenden Zeile um eine einfache oder komplexe Abfrage handelt 1) SIMPLE: Einfache Abfrage, d. h. sie enthält keine Unterabfragen und UNION 2) SUBQUERY: bezeichnet eine Unterabfrage 3) DERIVED: wird verwendet, um die SELECT-Anweisung in der Unterabfrage anzugeben, die in der FORM-Klausel enthalten ist 4) UNION: 3. Tabelle: Gibt an, auf welche Tabelle zugegriffen werden soll 4. Partitionen: Zugriffspartitionen 5. Typ: Assoziationstyp, der angibt, wie Zeilen in der Tabelle gefunden werden. 1) ALLE: Vollständiger Tabellenscan. Um Daten zu finden, müssen alle Daten vom Anfang bis zum Ende gescannt werden (das Schlüsselwort „limit“ scannt nicht alle Daten). 2) Index: Index-Scan. Dies entspricht einem vollständigen Tabellenscan, mit der Ausnahme, dass die Tabelle in Indexreihenfolge statt in Zeilenreihenfolge gescannt wird. Der Hauptvorteil besteht darin, dass das Sortieren vermieden wird. Der größte Nachteil ist der Mehraufwand beim Lesen der gesamten Tabelle in Indexreihenfolge. 3) Reichweite: Reichweitenscan. Es handelt sich um einen eingeschränkten Index-Scan, der an einem bestimmten Punkt im Index beginnt, ohne den gesamten Index zu durchlaufen. 4) Ref.: Indexzugriff. Es gibt alle Zeilen zurück, die einem einzelnen Wert entsprechen. Dies geschieht nur, wenn nicht eindeutiger Besitz oder eindeutiger Besitz mit einem nicht eindeutigen Präfix verwendet wird. 5) eq_ref: Verwenden Sie diesen Index zum Suchen und Zurückgeben von höchstens einem Datensatz, wenn es sich um einen Primärschlüsselindex und einen eindeutigen Index handelt. 6) const, system: Diese Zugriffstypen werden verwendet, wenn MySQL einen Teil der Abfrage optimieren und in eine Konstante umwandeln kann. 6. possible_keys: zeigt an, welche Schlüssel für die Abfrage verwendet werden können 7. Schlüssel: MySQL entscheidet, welcher Index verwendet werden soll, um den Zugriff auf diese Tabelle zu optimieren. Wenn dieser Index nicht in Possible_Keys erscheint, kann ein abdeckender Index gewählt werden. Wenn kein Index verwendet wird, ist dieser Wert NULL. 8. key_len: Die Anzahl der Bytes des Index, je kürzer, desto besser. Im Allgemeinen entspricht key_len der Länge des Feldtyps der Indexspalte, z. B. int 4 Bytes, bigint 8 Bytes, date 3 Bytes und datetime 8 Bytes. Wenn die Indexspalte ein Zeichenfolgentyp ist, muss ihr Zeichensatz berücksichtigt werden. Jedes Zeichen von utf8 belegt 3 Felder, und der Variablentyp (varchar) erfordert zusätzliche 2 Bytes. Wenn die Indexspalte null sein kann, ist ein zusätzliches Feld erforderlich. 9. Verweis: 10. Zeilen: Die Anzahl der Zeilen, die MySQL nach Schätzung lesen muss, um die gewünschte Zeile zu finden 11. gefiltert: Der Prozentsatz der zurückgegebenen Zeilen im Verhältnis zur Anzahl der gelesenen Zeilen (geschätzt). Je größer der Wert, desto besser. 12. Extra: Zeigt wichtige Informationen an, die nicht in andere Spalten passen. Häufige Werte sind: 1) Index verwenden: Gibt an, dass ein überdeckender Index verwendet wird, um den Zugriff auf die Tabelle zu vermeiden. 2) Verwenden von where: Der MySQL-Server filtert, nachdem die Speicher-Engine die Zeile abgerufen hat 3) Temporäre Tabelle verwenden: Gibt an, dass MySQL beim Sortieren der Abfrageergebnisse eine temporäre Tabelle verwendet. 3. Beispiele Beispiel 1: mysql> erklären Sie select * from bd_dept; +----+----------+---------+------------+------+---------------+-----+---------+------+---------+------+------+------+------+------+------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+---------+------------+------+---------------+-----+---------+------+---------+------+------+------+------+------+------+ | 1 | EINFACH | bd_dept | NULL | ALLE | NULL | NULL | NULL | NULL | 3 | 100,00 | NULL | +----+----------+---------+------------+------+---------------+-----+---------+------+---------+------+------+------+------+------+------+ Es ist ersichtlich, dass die Anweisung einen vollständigen Tabellenscan durchführt, ohne den Index zu verwenden Beispiel 2: mysql> erläutern Sie „select * from bd_dept where id=1;“ +----+----------+---------+------------+-------+---------------+---------+---------+---------+---------+-------+------+------+------+------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+---------+------------+-------+---------------+---------+---------+---------+---------+-------+------+------+------+------+ | 1 | SIMPLE | bd_dept | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100,00 | NULL | +----+----------+---------+------------+-------+---------------+---------+---------+---------+---------+-------+------+------+------+------+ Diese Anweisung verwendet den Primärschlüsselindex. Sie müssen nur einen Datensatz scannen, um das Ergebnis zu erhalten. Der int-Typ belegt 4 Bytes, also ist ken_len=4. Beispiel 3: mysql> erläutern Sie „select * from bd_dept where dept_code='01';“ +----+----------+---------+------------+-------+---------------+-----------+-----------+-----------+---------+-------+---------+------+------+------+------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+---------+------------+-------+---------------+-----------+-----------+-----------+---------+-------+---------+------+------+------+------+ | 1 | SIMPLE | bd_dept | NULL | const | dept_code | dept_code | 32 | const | 1 | 100,00 | NULL | +----+----------+---------+------------+-------+---------------+-----------+-----------+-----------+---------+-------+---------+------+------+------+------+ dept_code ist ein eindeutiges Indexfeld, der Feldtyp ist varchar(10) und es ist nicht leer, daher beträgt die Indexlänge 10*3+2=33. Beispiel 4: mysql> erläutern Sie „select * from bd_dept where create_date>'2020-04-29';“ +----+----------+---------+------------+-------+---------------+---------------+-------------+---------+------+---------+----------+----------+----------+-----------------------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+---------+------------+-------+---------------+---------------+-------------+---------+------+---------+----------+----------+----------+-----------------------+ | 1 | SIMPLE | bd_dept | NULL | Bereich | Erstellungsdatum | Erstellungsdatum | 4 | NULL | 1 | 100,00 | Indexbedingung wird verwendet | +----+----------+---------+------------+-------+---------------+---------------+-------------+---------+------+---------+----------+----------+----------+-----------------------+ create_date ist vom Typ „Datum“, ein allgemeines Indexfeld, das leer sein kann. Die Abfragebedingung ist größer als, daher ist der Assoziationstyp „Bereich“ und die Indexlänge ist 3+1=4. Beispiel 5: mysql> erklären Sie „select a.id, a.dept_name, b.dept_name parent_name from bd_dept a inner join bd_dept b on a.id=b.parent_id“; +----+----------+----------+---------+--------+---------------+--------+---------+---------+----------------------+----------+----------+-------------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+----------+---------+--------+---------------+--------+---------+---------+----------------------+----------+----------+-------------+ | 1 | SIMPLE | b | NULL | ALL | NULL | NULL | NULL | NULL | 3 | 100,00 | Verwenden von „where“ | | 1 | EINFACH | a | NULL | eq_ref | PRIMÄR | PRIMÄR | 4 | zhi_test.b.parent_id | 1 | 100,00 | NULL | +----+----------+----------+---------+--------+---------------+--------+---------+---------+----------------------+----------+----------+-------------+ Es ist ersichtlich, dass MySQL zuerst einen vollständigen Tabellenscan durchführt und ihn dann über den Primärschlüssel verknüpft Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Detaillierte Erläuterung häufiger Xshell-Probleme und zugehöriger Konfigurationen
>>: Vue implementiert scrollbaren Popup-Fenstereffekt
In diesem Artikel finden Sie das Installations-Tu...
Erklären Sie den gesamten Prozess von CLion von G...
Einführung Die aktuellen Anforderungen des Untern...
Wenn Sie die Größe und Anzahl der InnoDB-Redo-Log...
1. Grundstruktur: Code kopieren Der Code lautet wi...
Inhaltsverzeichnis Kongruent und inkongruent kong...
Bereiten Sie die Datenbank (MySQL) vor. Wenn Sie ...
1. Frühere Versionen yum entfernen Docker Docker-...
Vorwort Hinweis: Die Testdatenbankversion ist MyS...
Inhaltsverzeichnis 1. Grundlegende Konzepte 1.1 Z...
Panther begann als Anfänger und ich bin immer noc...
Inhaltsverzeichnis Vorwort 1.ignorieren einfügen ...
Code kopieren Der Code lautet wie folgt: <div ...
In diesem Artikelbeispiel wird der spezifische Co...
Wenn für MySQL 5.5 der Zeichensatz nicht festgele...