Wenn es um die MySQL-Optimierung geht, müssen wir zunächst wissen, wie unsere aktuelle SQL-Anweisung in der eigentlichen Datenbank ausgeführt wird, bevor wir darüber sprechen können, wie sie optimiert werden kann. In MySQL steht uns ein sehr nützliches Schlüsselwort zur Simulation der Anweisungsausführung zur Verfügung: EXPLAIN. Mit EXPLAIN können Sie die Ausführungseffekte von SQL-Anweisungen anzeigen. Dies kann dabei helfen, bessere Indizes auszuwählen, Abfrageanweisungen zu optimieren und besser optimierte Anweisungen zu schreiben. Heute werden wir also über einige grundlegende Verwendungen und Anwendungen dieses Schlüsselworts sprechen. 1. NutzungDie Verwendung von EXPLAIN ist sehr einfach: mysql> EXPLAIN SELECT * FROM Benutzer; Fügen Sie einfach das Schlüsselwort EXPLAIN vor der ursprünglichen SQL-Anweisung hinzu, oder fügen Sie das Schlüsselwort EXPLAIN gefolgt von der SQL-Anweisung hinzu, die Sie überprüfen möchten. 2. Ausgabeergebnisse Die Ausgabe der EXPLAIN-Anweisung sind die gewünschten Daten und der Schwerpunkt unserer Analyse. +----+----------+----------+---------+------+---------------+---------+---------+------+---------+------+------+------+------+------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+----------+---------+------+---------------+---------+---------+------+---------+------+------+------+------+------+ | 1 | SIMPLE | Benutzer | NULL | ALLE | NULL | NULL | NULL | NULL | 3 | 100,00 | NULL | +----+----------+----------+---------+------+---------------+---------+---------+------+---------+------+------+------+------+------+ Die EXPLAIN-Anweisung liefert uns insgesamt 10 Datenspalten. Als Nächstes sehen wir uns die Bedeutung einiger Datenspalten an, die für die Leistungsoptimierung wichtiger sind. 1.Ich würdeDies ist die Sequenznummer der Auswahlabfrage. 2.Typ auswählenWenn unsere SQL-Anweisung keine SELECT-Anweisung ist (d. h. Löschen, Aktualisieren …), ist der Wert dieses Felds der entsprechende Vorgangstyp (Löschen, Aktualisieren …). mysql> ERKLÄREN SIE INSERT INTO Benutzer VAULES(2,'ahong','31'); Der Ausgabe-Select_Type ist zu diesem Zeitpunkt unser entsprechendes INSERT: +----+----------+----------+---------+------+---------------+---------+---------+------+---------+------+------+------+------+------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+----------+---------+------+---------------+---------+---------+------+---------+------+------+------+------+------+ | 1 | INSERT | Benutzer | NULL | ALLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | +----+----------+----------+---------+------+---------------+---------+---------+------+---------+------+------+------+------+------+ Wenn die SQL-Anweisung eine Select-Anweisung ist, entspricht sie einigen detaillierten Select-Typen, die wie folgt aussehen können: SIMPLE: Einfaches SELECT (verwendet keine UNION oder Unterabfragen usw.) PRIMARY: das äußerste SELECT UNION: Die zweite oder nachfolgende SELECT-Anweisung in einer UNION. DEPENDENT UNION: Die zweite oder nachfolgende SELECT-Anweisung in einer UNION hängt von der äußeren Abfrage ab. UNION RESULT: Das Ergebnis der UNION. SUBQUERY: Die erste SELECT-Anweisung in einer Unterabfrage DEPENDENT SUBQUERY: Das erste SELECT in einer Unterabfrage, die von der äußeren Abfrage abhängt. DERIVED: Das SELECT der abgeleiteten Tabelle (eine Unterabfrage in der FROM-Klausel). Hier ist ein Beispiel für die einfachste mögliche SIMPLE-Abfrage: mysql> EXPLAIN SELECT * FROM Benutzer; +----+----------+----------+---------+------+---------------+---------+---------+------+---------+------+------+------+------+------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+----------+---------+------+---------------+---------+---------+------+---------+------+------+------+------+------+ | 1 | SIMPLE | Benutzer | NULL | ALLE | NULL | NULL | NULL | NULL | 3 | 100,00 | NULL | +----+----------+----------+---------+------+---------------+---------+---------+------+---------+------+------+------+------+------+ 3.TabelleZeigt an, um welche Tabelle es sich bei den Daten handelt, auf die bei dieser Operation zugegriffen wird. 4.PartitionenZeigt die von der Tabelle verwendeten Partitionen an. Wenn Sie die Anzahl der Unternehmensbestellungen für zehn Jahre zählen möchten, können Sie die Daten in zehn Partitionen aufteilen, eine für jedes Jahr. Dies kann die Abfrageeffizienz erheblich verbessern. 5.Typ Dies ist die wichtigste Spalte. Zeigt an, welche Klasse die Verbindung verwendet und ob ein Index verwendet wird oder nicht. Es ist der Schlüssel zur Analyse der Abfrageleistung. System > const > eq_ref > ref > Volltext > ref_or_null > Index_Merge > eindeutige Unterabfrage > Index_Unterabfrage > Bereich > Index > ALLE Diese Situationen haben folgende Bedeutung:
Generell muss darauf geachtet werden, dass die Abfrage mindestens die Bereichsebene, besser noch die Referenzebene erreicht, da es sonst zu Performanceproblemen kommen kann. 6.möglicher_SchlüsselZeigt die Indexspalten an, die von der Abfrageanweisung verwendet werden können. Der Wert kann eins, ein Vielfaches oder null sein. 7.Schlüssel Die Schlüsselspalte zeigt die tatsächlich von der Abfrageanweisung verwendete Indexspalte. Wenn null, wird der Index nicht verwendet. mysql> erläutern Sie „select * from user where age = 1“; Es werden folgende Ergebnisse erzielt: +----+----------+----------+---------+------+---------------+---------+---------+---------+-------+---------+-------+------+------+------+------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+----------+---------+------+---------------+---------+---------+---------+-------+---------+-------+------+------+------+------+ | 1 | SIMPLE | Benutzer | NULL | Ref | Alter | Alter | 5 | const | 1 | 100,00 | NULL | +----+----------+----------+---------+------+---------------+---------+---------+---------+-------+---------+-------+------+------+------+------+ 8.SchlüssellängeZeigt die Länge des Indexes an, der von der aktuellen Abfrageanweisung verwendet wird. Je kürzer die Länge, desto besser, ohne an Genauigkeit zu verlieren. 9.refDie Spalte der vorherigen Tabelle, auf die verwiesen wird. 10.ReihenBasierend auf der Tabelle und der Abfrage schätzt MySQL die Anzahl der Zeilen, die es untersuchen muss, um das Endergebnis zurückzugeben. Je größer der Wert dieser Spalte, desto schlechter die Abfrageeffizienz. 11.gefiltertEin Prozentwert, der zusammen mit dem Wert der Zeilenspalte verwendet wird, kann den Ergebnissatz der vorherigen Tabelle im Abfrageausführungsplan (QEP) schätzen, um die Anzahl der Iterationen des Verbindungsvorgangs zu bestimmen. Kleine Tabellen steuern große Tabellen und reduzieren so die Anzahl der Verknüpfungen. 12.extraEs gibt verschiedene Arten von Zusatzinformationen darüber, wie MySQL Abfragen analysiert: Die in Extra enthaltenen Werte sind:
Oben finden Sie den detaillierten Inhalt des Verwendungsbeispiels der MySQL EXPLAIN-Anweisung. Weitere Informationen zur MySQL EXPLAIN-Anweisung finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Drei Schritte zur Lösung des IE-Adressleistensymbol-Anzeigeproblems
>>: Grundlegendes HTML-Verzeichnisproblem (Unterschied zwischen relativem und absolutem Pfad)
Dieser Artikel basiert auf Linux CentOS8, um Dock...
Installationspfad: /application/mysql-5.5.56 1. V...
Lassen Sie uns zunächst über die in()-Abfrage spr...
Heute ist bei mir ein Problem aufgetreten, als ic...
Redis verwendet das Apline-Image (Alps) von Redis...
Ergebnisse erzielenImplementierungscode html <...
Sophie Hardach Kai von Clyde Quay 37 Ost Seifenkis...
Ich bin vor Kurzem auf ein Problem gestoßen, als ...
Ich verwende die Funktion zur Spracherkennung mit...
In diesem Artikel finden Sie eine ausführliche An...
Bei den tatsächlichen Projekten, an denen ich tei...
F1: Welche Indizes hat die Datenbank? Was sind di...
In diesem Artikel wird der spezifische Code von j...
Inhaltsverzeichnis 1. Verpackungsbefehl hinzufüge...
Docker wird immer ausgereifter und seine Funktion...