MySQL erklärt das Prinzip und Beispiel zum Abrufen von Abfrageanweisungen

MySQL erklärt das Prinzip und Beispiel zum Abrufen von Abfrageanweisungen

„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:
  • Grundlegende Nutzungsanalyse von Explain, einem magischen Tool zur MySQL-Leistungsoptimierung
  • MySQL-Abfrageanweisungsprozess und grundlegende Konzepte der EXPLAIN-Anweisung und deren Optimierung
  • So analysieren Sie den SQL-Ausführungsplan in MySQL mit EXPLAIN
  • So verwenden Sie „Explain“, um den SQL-Ausführungsplan in MySql abzufragen
  • Detaillierte Erklärung der Rolle von Explain in MySQL
  • Detaillierte Analyse der Erläuterung bei der MySQL-Abfrageoptimierung
  • Detaillierte Erklärung der Verwendung von Explain in MySQL
  • MySQL-Zusammenfassung erklären

<<:  Detaillierte Erläuterung häufiger Xshell-Probleme und zugehöriger Konfigurationen

>>:  Vue implementiert scrollbaren Popup-Fenstereffekt

Artikel empfehlen

Grafisches Tutorial zur Deinstallation und Installation von MySQL unter Linux

Dies ist mein erster Blog. Ich bin seit zwei Jahr...

Ubuntu 20.04 stellt eine Verbindung zu WLAN her (2 Methoden)

Ich habe vor Kurzem Ubuntu 20.04 installiert und ...

Detaillierte Erläuterung der Nginx-Strombegrenzungskonfiguration

Dieser Artikel erläutert anhand von Beispielen di...

Zusammenfassung der grundlegenden Wissenspunkte der Linux-Gruppe

1. Grundlegende Einführung in die Linux-Gruppe Un...

Detailliertes Tutorial zum Ausführen von Selenium+Chromedriver auf dem Server

1. Einleitung Ich möchte Selenium verwenden, um D...

So installieren Sie Mysql5.7 in Centos6

Umfeld Centos 6.6 MySQL 5.7 Installieren Falls da...

Detaillierte Erklärung asynchroner Iteratoren in nodejs

Inhaltsverzeichnis Vorwort Was sind asynchrone It...

Warum funktioniert Ihre Größe: 100 % nicht?

Warum funktioniert Ihre Größe: 100 % nicht? Diese...

Installation und Verwendung von MySQL unter Ubuntu (allgemeine Version)

Unabhängig von der verwendeten Ubuntu-Version ist...

Grafisches Tutorial zur Installation von JDK1.8 unter CentOS7.4

Schritte zur Linux-Installation von JDK1.8 1. Übe...

CnBlogs - Teilen im benutzerdefinierten Blogstil

Nachdem ich die halbe Nacht daran gearbeitet hatt...

JavaScript zum Erzielen eines Tab-Umschalteffekts

In diesem Artikel wird der spezifische JavaScript...

Zusammenfassung der neuen Verwendung von vi (vim) unter Linux

Ich benutze den vi-Editor seit mehreren Jahren, h...