1. EinleitungDie EXPLAIN-Anweisung liefert Informationen darüber, wie MySQL eine Anweisung ausführt. EXPLAIN wird mit den Anweisungen SELECT, DELETE, INSERT, REPLACE und UPDATE verwendet. mysql> EXPLAIN SELECT * FROM Mitarbeiter WHERE emp_no = 10001; +----+----------+-----------+---------+-----------+---------------+--------+---------+---------+---------+-------+------+------+------+------+------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+-----------+---------+-----------+---------------+--------+---------+---------+---------+-------+------+------+------+------+------+ | 1 | SIMPLE | Mitarbeiter | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100,00 | NULL | +----+----------+-----------+---------+-----------+---------------+--------+---------+---------+---------+-------+------+------+------+------+------+ 1 Zeile im Satz, 1 Warnung (0,00 Sek.) Einfach ausgedrückt kann mit EXPLAIN analysiert werden, ob und welchen Index die SQL-Anweisung verwendet. EXPLAIN gibt für jede in der SELECT-Anweisung verwendete Tabelle eine Zeile zurück. Es listet die Tabellen in der Ausgabe in der Reihenfolge auf, in der MySQL sie bei der Verarbeitung der Anweisung liest. MySQL löst alle Verknüpfungen mithilfe von Nested-Loop-Join-Algorithmen auf. Dies bedeutet, dass MySQL eine Zeile aus der ersten Tabelle liest und dann eine passende Zeile in der zweiten Tabelle, der dritten Tabelle usw. findet. Nach der Verarbeitung aller Tabellen durchläuft MySQL nach der Ausgabe der ausgewählten Spalten die Tabellenliste zurück, bis es eine Tabelle findet, in der weitere übereinstimmende Zeilen vorhanden sind. Lesen Sie die nächste Zeile aus dieser Tabelle und fahren Sie mit der nächsten Tabelle fort. 2. EXPLAIN-Ausgabespalten
In der obigen Abbildung können wir die Ergebnisse von EXPLAIN sehen, einschließlich der Tabellenkopfzeilen-ID, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered und Extra. Lassen Sie uns die Bedeutung dieser Felder lernen und sie anhand von Beispielen verstehen. 2.1 Ich würde SELECT-Kennung, die Sequenznummer des SELECT in der Abfrage. Dieser Wert kann NULL sein, wenn die Zeile auf das Vereinigungsergebnis anderer Zeilen verweist. In diesem Fall zeigt die Tabellenspalte einen Wert wie <unionM,N> an, um anzuzeigen, dass sich die Zeile auf die Vereinigung der Zeilen mit den ID-Werten M und N bezieht. Es gibt drei Arten von ID-Werten: Die ID ist dieselbe, die Ausführungsreihenfolge ist von oben nach unten mysql> ERKLÄREN ( -> SELECT * FROM Mitarbeiter emp -> LEFT JOIN dept_emp de ON emp.emp_no = de.emp_no -> LEFT JOIN Abteilungen Abteilung ON dept.dept_no = de.dept_no -> WO emp.emp_no = 10001); +----+----------+----------+---------+--------+---------------+--------+---------+---------+----------------------+----------+----------+----------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+----------+---------+--------+---------------+--------+---------+---------+----------------------+----------+----------+----------+ | 1 | SIMPLE | emp | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100,00 | NULL | | 1 | SIMPLE | de | NULL | ref | PRIMARY | PRIMARY | 4 | const | 1 | 100,00 | NULL | | 1 | SIMPLE | Abteilung | NULL | eq_ref | PRIMARY | PRIMARY | 12 | Mitarbeiter.de.Abteilungsnummer | 1 | 100,00 | NULL | +----+----------+----------+---------+--------+---------------+--------+---------+---------+----------------------+----------+----------+----------+ 3 Zeilen im Satz, 1 Warnung (0,03 Sek.) Die IDs sind unterschiedlich. Wenn es sich um eine Unterabfrage handelt, erhöht sich die ID-Nummer. Je größer der ID-Wert, desto höher die Priorität der Ausführung. mysql> EXPLAIN SELECT * FROM Mitarbeiter emp -> WO emp.emp_no NICHT IN ( SELECT de.emp_no FROM dept_emp de -> WHERE de.dept_no NOT IN ( SELECT dept_no FROM departments WHERE dept_name = 'Entwicklung')); +----+----------+-------------+------------+-------+-------------------+-----------+---------+---------+-----------+--------+-----------+-------------+-----------+--------------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+-------------+------------+-------+-------------------+-----------+---------+---------+-----------+--------+-----------+-------------+-----------+--------------+ | 1 | PRIMARY | emp | NULL | ALL | NULL | NULL | NULL | NULL | 299468 | 100,00 | Verwenden von „where“ | | 2 | UNTERABFRAGE | de | NULL | index | PRIMARY | dept_no | 12 | NULL | 308493 | 100,00 | Verwenden von „where“; Verwenden von „index“ | | 3 | UNTERABFRAGE | Abteilungen | NULL | const | PRIMARY, Abteilungsname | Abteilungsname | 122 | const | 1 | 100,00 | Index wird verwendet | +----+----------+-------------+------------+-------+-------------------+-----------+---------+---------+-----------+--------+-----------+-------------+-----------+--------------+ 3 Zeilen im Satz, 1 Warnung (0,00 Sek.) Es gibt sowohl gleiche als auch unterschiedliche IDs Wenn die ID gleich ist, können sie als Gruppe betrachtet werden. Die Ausführungsreihenfolge derselben Gruppen-ID ist von oben nach unten. Bei verschiedenen Gruppen gilt: Je größer der ID-Wert, desto höher die Ausführungspriorität. mysql> EXPLAIN SELECT * FROM Mitarbeiter emp -> WO emp.emp_no IN (WÄHLEN Sie de.emp_no FROM dept_emp de -> WHERE de.dept_no IN ( SELECT dept_no FROM departments WHERE dept_name LIKE '%Develop%')); +----+--------------+-------------+------------+-------+-----------------+-----------+--------+----------------+--------+-----------+--------+-----------+----------------------------------------------------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+--------------+-------------+------------+-------+-----------------+-----------+--------+----------------+--------+-----------+--------+-----------+----------------------------------------------------+ | 1 | EINFACH | <Unterabfrage2> | NULL | ALLE | NULL | NULL | NULL | NULL | NULL | 100,00 | NULL | | 1 | SIMPLE | emp | NULL | ALL | PRIMARY | NULL | NULL | NULL | 299468 | 0,00 | Verwenden von where; Verwenden von Join-Puffer (Block Nested Loop) | | 2 | MATERIALIZED | Abteilungen | NULL | Index | PRIMARY | Abteilungsname | 122 | NULL | 9 | 11.11 | Verwenden von „where“; Verwenden von „index“ | | 2 | MATERIALIZED | de | NULL | ref | PRIMARY,dept_no | dept_no | 12 | Mitarbeiter.Abteilungen.dept_no | 38561 | 100,00 | Index wird verwendet | +----+--------------+-------------+------------+-------+-----------------+-----------+--------+---------------+--------+-----------+-----------------------------------------+ 4 Zeilen im Satz, 1 Warnung (0,01 Sek.) 2.2 Typ auswählen Der Abfragetyp wird hauptsächlich verwendet, um zwischen allgemeinen Abfragen, gemeinsamen Abfragen, Unterabfragen und anderen komplexen Abfragen zu unterscheiden. Enthält SIMPLE, PRIMARY, UNION, DEPENDENT UNION, UNION RESULT, SUBQUERY, DEPENDENT SUBQUERY, DERIVED, MATERIALIZED, UNCACHEABLE SUBQUERY, UNCACHEABLE UNION EINFACH Einfaches SELECT, keine UNION oder Unterabfragen. mysql> ERKLÄREN Sie, ob * von Mitarbeitern ausgewählt ist, wobei emp_no=10001; +----+----------+-----------+---------+-----------+---------------+--------+---------+---------+---------+-------+------+------+------+------+------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+-----------+---------+-----------+---------------+--------+---------+---------+---------+-------+------+------+------+------+------+ | 1 | SIMPLE | Mitarbeiter | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100,00 | NULL | +----+----------+-----------+---------+-----------+---------------+--------+---------+---------+---------+-------+------+------+------+------+------+ 1 Zeile im Satz, 1 Warnung (0,00 Sek.) PRIMÄR Wenn die Abfrage komplexe Unterteile enthält, wird die äußerste Abfrage als PRIMARY markiert. mysql> EXPLAIN SELECT * FROM Mitarbeiter emp -> WO emp.emp_no IN (WÄHLEN Sie max(emp_no) VON dept_emp); +----+--------------------+-------+------------+------+---------------+---------+---------+---------+---------+---------+----------+----------+------------------------------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+--------------------+-------+------------+------+---------------+---------+---------+---------+---------+---------+----------+----------+------------------------------+ | 1 | PRIMARY | emp | NULL | ALL | NULL | NULL | NULL | NULL | 299468 | 100,00 | Verwenden von „where“ | | 2 | ABHÄNGIGE UNTERABFRAGE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Tabellenauswahl wegoptimiert | +----+--------------------+-------+------------+------+---------------+---------+---------+---------+---------+---------+----------+----------+------------------------------+ 2 Zeilen im Satz, 1 Warnung (0,00 Sek.) UNION Die zweite oder nachfolgende SELECT-Anweisung, die nach einer UNION erscheinen, werden als UNION gekennzeichnet mysql> ERKLÄREN (SELECT emp_no,dept_no FROM dept_emp LIMIT 10) -> UNION -> WÄHLEN Sie emp_no,dept_no AUS dept_manager; +----+--------------+--------------+------------+-------+---------------+--------+---------+---------+---------+---------+----------+-----------------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+--------------+--------------+------------+-------+---------------+--------+---------+---------+---------+---------+----------+-----------------+ | 1 | PRIMARY | dept_emp | NULL | index | NULL | dept_no | 12 | NULL | 308493 | 100,00 | Index wird verwendet | | 2 | UNION | dept_manager | NULL | index | NULL | dept_no | 12 | NULL | 24 | 100,00 | Index wird verwendet | | NULL | UNION-ERGEBNIS | <union1,2> | NULL | ALL | NULL | NULL | NULL | NULL | NULL | NULL | Temporäre | verwenden | +----+--------------+--------------+------------+-------+---------------+--------+---------+---------+---------+---------+----------+-----------------+ 3 Zeilen im Satz, 1 Warnung (0,00 Sek.) ABHÄNGIGE GEWERKSCHAFT Wie UNION, erscheint in einer UNION- oder UNION ALL-Anweisung, aber diese Abfrage wird von der äußeren Abfrage beeinflusst.
ZusammenfassenDies ist das Ende dieses Artikels über MySQL EXPLAIN-Ausgabespalten. Weitere Informationen zu MySQL EXPLAIN-Ausgabespalten finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Ich habe einige Websites zum Thema Wohndesign herausgesucht, die ich für gut halte.
>>: Vue-Komponenten Dynamische Komponenten detaillierte Erklärung
1: Unterschiede bei Geschwindigkeit und Lademethod...
In CSS3 können mit der Transformationsfunktion vi...
Vorwort Dieser Artikel ist ziemlich ausführlich u...
1. Verwenden Sie das Tag <a> zum Vervollstä...
Da Frameset und Body auf derselben Ebene liegen, k...
Inhaltsverzeichnis 1. Was ist Curry 2. Verwendung...
Wenn wir unter CentOS 7 den Host-Port mit einem B...
Inhaltsverzeichnis 1. Initialisieren Sie die Kart...
Wie kann ich im offiziellen MySQL-Dump-Tool nur e...
Inhaltsverzeichnis Bidirektionales Bindungsprinzi...
In diesem Artikel wird der spezifische Code von j...
Einführung in allgemeine Dockerfile-Anweisungen A...
1. Einige Tipps zu mit class in react deklarierte...
Das Verwendungsformat des mysqladmin-Tools ist: m...
Das Layout des Textes unterliegt je nach Sprache ...