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

Verwenden Sie CSS, um die Breite von INPUT in TD festzulegen

Als ich kürzlich mit C# ein Webprogramm erstellte,...

Sieben Prinzipien eines guten Designers (1): Schriftdesign

Nun, vielleicht sind Sie ein Design-Guru, oder vie...

Dynamischer Sternenhimmel Hintergrund umgesetzt mit CSS3

Ergebnis:Implementierungscode html <link href=...

Kompilieren Sie CPP-Dateien mit G++ in Ubuntu

Als ich die CPP-Datei zum ersten Mal mit G++ komp...

Detaillierte Erläuterung der Wissenspunkte zu Linux-Dateivorgängen

Verwandte Systemaufrufe für Dateioperationen erst...

js zur Implementierung einer Überprüfungscode-Interferenz (dynamisch)

In diesem Artikelbeispiel wird der spezifische Co...

Tutorial zum Deaktivieren und Aktivieren von Triggern in MySQL [Empfohlen]

Bei der Verwendung von MySQL werden häufig Trigge...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.20 (Win10)

In diesem Artikel wird die Installations- und Kon...

Eine kleine Frage zur Ausführungsreihenfolge von SQL in MySQL

Ich bin heute bei der Arbeit auf ein SQL-Problem ...

So erstellen Sie einen SVN-Server unter Linux

1: SVN installieren yum install -y Subversion 2. ...

Installieren Sie Zookeeper unter Docker (Standalone und Cluster).

Nachdem wir Docker gestartet haben, schauen wir u...