Eine eingehende Analyse von MySQL erläutert die Verwendung und die Ergebnisse

Eine eingehende Analyse von MySQL erläutert die Verwendung und die Ergebnisse

Vorwort

Bei unserer täglichen Arbeit führen wir manchmal langsame Abfragen aus, um einige SQL-Anweisungen aufzuzeichnen, deren Ausführung lange dauert. Das Auffinden dieser SQL-Anweisungen bedeutet nicht, dass die Arbeit erledigt ist. Manchmal verwenden wir häufig den Befehl „explain“, um den Ausführungsplan dieser SQL-Anweisungen anzuzeigen und festzustellen, ob die SQL-Anweisung einen Index verwendet und ob ein vollständiger Tabellenscan durchgeführt wird. Dies kann über den Befehl „explain“ angezeigt werden. Wir verfügen also über ein tiefes Verständnis des kostenbasierten Optimierers von MySQL und können auch viele Einzelheiten zu den Zugriffsstrategien erhalten, die vom Optimierer in Betracht gezogen werden können, und dazu, welche Strategie vom Optimierer voraussichtlich beim Ausführen von SQL-Anweisungen übernommen wird. (QEP: SQL generiert einen Ausführungsplan für die Abfrageausführung)

mysql> erläutern Sie „select * from servers“;
+----+----------+---------+------+---------------+-----------+---------+---------+------+------+------+
| ID | Auswahltyp | Tabelle | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | Extra |
+----+----------+---------+------+---------------+-----------+---------+---------+------+------+------+
| 1 | EINFACH | Server | ALLE | NULL | NULL | NULL | NULL | 1 | NULL |
+----+----------+---------+------+---------------+-----------+---------+---------+------+------+------+
1 Zeile im Satz (0,03 Sek.)

1. Einführung in EXPLAIN

Mit dem Schlüsselwort EXPLAIN können Sie die Ausführung von SQL-Abfrageanweisungen durch den Optimierer simulieren, sodass Sie erfahren, wie MySQL Ihre SQL-Anweisungen verarbeitet. Analysieren Sie den Leistungsengpass Ihrer Abfrageanweisung oder Tabellenstruktur. Durch Erklären können wir die folgenden Informationen erhalten:

  • Lesereihenfolge der Tabelle
  • Vorgangstyp des Datenlesevorgangs
  • Welche Indizes können verwendet werden
  • Welche Indizes werden eigentlich verwendet?
  • Verweise zwischen Tabellen
  • Wie viele Zeilen jeder Tabelle werden vom Optimierer abgefragt?

Verwendung: Erläuterung + SQL-Anweisung. Die enthaltenen Felder sind wie folgt

2. Bedeutung der einzelnen Felder im Ausführungsplan

2.1 Ich würde

Die ID ist dieselbe und die Ausführungsreihenfolge ist von oben nach unten

Die ID ist 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 und desto früher wird sie ausgeführt.

Wenn die IDs gleich oder unterschiedlich sind und gleichzeitig vorhanden sind, kann dieselbe ID als Gruppe betrachtet werden. Die Ausführung erfolgt von oben nach unten in derselben Gruppe, und die Gruppe mit der größten ID wird zuerst ausgeführt.

2.4 Typ

Unter Typ wird angezeigt, welcher Typ in der Abfrage verwendet wird. Zu den in Typ enthaltenen Typen gehören die folgenden:

System > const > eq_ref > ref > Bereich > Index > alle

  • Die Systemtabelle hat nur eine Zeile mit Datensätzen (gleich der Systemtabelle). Dies ist eine spezielle Spalte vom Typ const und erscheint normalerweise nicht. Dies kann auch ignoriert werden.
  • const bedeutet, dass der Index einmal gefunden wird, und const wird zum Vergleichen von Primärschlüsseln oder eindeutigen Indizes verwendet. Da nur eine Datenzeile abgeglichen wird, ist dies sehr schnell. Wenn Sie den Primärschlüssel in die Where-Liste einfügen, kann MySQL die Abfrage in eine Konstante umwandeln.
  • eq_ref Eindeutiger Indexscan. Für jeden Indexschlüssel gibt es in der Tabelle nur einen passenden Datensatz. Wird häufig für Primärschlüssel- oder eindeutige Index-Scans verwendet.
  • ref Nicht eindeutiger Index-Scan, gibt alle Zeilen zurück, die einem einzelnen Wert entsprechen, was im Wesentlichen ein Indexzugriff ist. Es werden alle Zeilen zurückgegeben, die einem einzelnen Wert entsprechen. Es können jedoch mehrere qualifizierte Zeilen gefunden werden, daher sollte es als eine Mischung aus Suche und Scan betrachtet werden.
  • range ruft nur Zeilen in einem bestimmten Bereich ab und verwendet einen Index zum Auswählen von Zeilen. Die Schlüsselspalte zeigt, welcher Index verwendet wird. Dies ist normalerweise eine Abfrage, die in Ihrer Where-Anweisung „between“, „<“, „>“, „in“ usw. verwendet. Dieser Bereichsscan-Index ist besser als ein vollständiger Tabellenscan, da er nur an einem Punkt im Index beginnen und an einem anderen Punkt enden muss, ohne den gesamten Index zu scannen.
  • Index Vollständiger Index-Scan, der Unterschied zwischen Index und Alles besteht darin, dass der Indextyp nur den Indexbaum durchläuft. Dies ist normalerweise schneller als ALL, da Indexdateien normalerweise kleiner als Datendateien sind. (Das heißt, obwohl sowohl „all“ als auch „Index“ die gesamte Tabelle lesen, liest „index“ aus dem Index, während „all“ von der Festplatte liest.)
  • Der Full Table Scan durchsucht die gesamte Tabelle nach übereinstimmenden Zeilen

2.5 mögliche Schlüssel und Schlüssel

Possible_keys zeigt die möglichen Indizes, die auf diese Tabelle angewendet werden können (einen oder mehrere). Wenn für die an der Abfrage beteiligten Felder ein Index vorhanden ist, wird dieser zwar aufgelistet, aber möglicherweise nicht tatsächlich von der Abfrage verwendet.

Der vom Schlüssel tatsächlich verwendete Index. Wenn er NULL ist, wird kein Index verwendet. (Mögliche Gründe sind fehlender Index oder Indexfehler)

2.6 Schlüssellänge

Gibt die Anzahl der im Index verwendeten Bytes an. Mit dieser Spalte kann die Länge des in der Abfrage verwendeten Indexes berechnet werden. Je kürzer die Länge, desto besser, ohne dass die Genauigkeit verloren geht.

2,7 Reihen

Schätzen Sie anhand der Tabellenstatistiken und der Indexauswahl grob die Anzahl der Zeilen, die zum Suchen der erforderlichen Datensätze erforderlich sind. Das heißt: je weniger, desto besser.

2.8 Extra

2.8.1 Filesort verwenden

Dies bedeutet, dass MySQL zum Sortieren der Daten einen externen Index verwendet, anstatt sie in der Reihenfolge der Indizes in der Tabelle zu lesen. Sortiervorgänge in MySQL, die nicht mithilfe von Indizes durchgeführt werden können, werden als „Dateisortierungen“ bezeichnet.

2.8.2 Verwendung von temporären

Eine temporäre Tabelle wird zum Speichern von Zwischenergebnissen verwendet. MySQL verwendet eine temporäre Tabelle zum Sortieren von Abfrageergebnissen. Wird häufig zum Sortieren nach Sortierung und Gruppieren nach Abfrage verwendet.

2.8.3 Index verwenden

Gibt an, dass bei der entsprechenden Auswahloperation ein überdeckender Index verwendet wird, wodurch der Zugriff auf die Datenzeilen der Tabelle vermieden wird, was effizient ist. Wenn gleichzeitig „using where“ vorkommt, bedeutet dies, dass der Index zum Durchführen von Indexschlüsselwertsuchen verwendet wird. Wenn „using where“ nicht gleichzeitig vorkommt, bedeutet dies, dass der Index zum Lesen von Daten und nicht zum Durchführen von Suchvorgängen verwendet wird.

2.8.4 Verwenden des Join-Puffers

Gibt an, dass der Verbindungscache verwendet wird. Beispielsweise ist bei Abfragen die Anzahl der Verknüpfungen mehrerer Tabellen sehr groß. Erhöhen Sie daher den Verknüpfungspuffer in der Konfigurationsdatei.

Zusammenfassen

Dies ist das Ende dieses Artikels über die eingehende Analyse der MySQL-Erklärungsnutzung und -ergebnisse. Weitere relevante Inhalte zur MySQL-Erklärungsnutzung und zu -ergebnissen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • MySQL-Abfrageanweisungsprozess und grundlegende Konzepte der EXPLAIN-Anweisung und deren Optimierung
  • MySQL ermöglicht langsame Abfragen (Einführung in die Verwendung der EXPLAIN-SQL-Anweisung)
  • Verwendung von MySQL-Explain (verwenden Sie Explain, um Abfrageanweisungen zu optimieren)
  • Detaillierte Erklärung und praktische Übungen zum Mysql-Tuning-Erklärtool (empfohlen)
  • Detaillierte Erklärung des Explain-Typs in MySQL
  • So optimieren Sie die MySQL-Indexfunktion basierend auf dem Schlüsselwort „Explain“
  • Detaillierte Analyse des Explain-Ausführungsplans in MySQL
  • Erläuterung der MySQL-Indexoptimierung
  • MYSQL Performance Analyzer EXPLAIN Anwendungsbeispielanalyse
  • So analysieren Sie den SQL-Ausführungsplan in MySQL mit EXPLAIN
  • Beispiele für die Verwendung der MySQL-EXPLAIN-Anweisung

<<:  HTML-Tutorial: Horizontales Liniensegment in HTML

>>:  Implementierung eines laufenden Springboot-Projekts mit Docker

Artikel empfehlen

So verleihen Sie einer Website ein höheres und ansprechenderes Aussehen

„Wie lässt man eine Website hochwertig aussehen? ...

So unterstützen Sie vollständiges Unicode in MySQL/MariaDB

Inhaltsverzeichnis Einführung in utf8mb4 Fehler b...

JavaScript zum Implementieren der Anzeige von Suchdaten

In diesem Artikel wird der Datenanzeigecode für d...

Vue verwendet WebSocket, um die Chat-Funktion zu simulieren

Der Effekt zeigt, dass sich zwei Browser gegensei...

Installations-Tutorial zur komprimierten Version von MySQL 8.0.11 unter Win10

In diesem Artikel finden Sie das Installations-Tu...

Zwei Möglichkeiten zum Löschen von Tabellendaten in MySQL und ihre Unterschiede

Es gibt zwei Möglichkeiten, Daten in MySQL zu lös...

Implementierungsbeispiel für dynamische Routing-Breadcrumbs für Elemente

Zu meistern: localStorage, Komponentenkapselung Ä...

So aktualisieren Sie alle Python-Bibliotheken in Ubuntu 18.04 auf einmal

Was ist Pip pip ist ein Python-Paketverwaltungsto...

Der Unterschied zwischen Float- und Positionsattributen im CSS-Layout

CSS-Layout – Positionseigenschaft Das Positionsat...

So stellen Sie die LNMP-Architektur im Docker bereit

Umweltanforderungen: IP Hostname 192.168.1.1 Knot...

Detailliertes Tutorial zum Herunterladen von MySQL unter Windows 10

MySQL-Versionen werden in Enterprise Edition und ...