VorwortAbfrageoptimierung ist nichts, was über Nacht erreicht werden kann. Sie müssen lernen, die entsprechenden Tools zu verwenden, aus den Erfahrungen anderer lernen, um SQL zu optimieren, und sich selbst verbessern. Lassen Sie uns zunächst die Vorteile von Indizes zusammenfassen: schneller Datenabruf, stabile Abfrage, sequentielle Speicherung, um zu vermeiden, dass der Server temporäre Tabellen erstellt, und Umwandlung von zufälligem I/O in geordneten I/O. Wenn der Index jedoch nicht standardisiert erstellt wird, führt dies zu folgenden Problemen: Er beansprucht zusätzlichen Speicherplatz, verschwendet Speicher und verringert die Leistung beim Hinzufügen, Löschen und Ändern von Daten. Daher können effiziente Indizes nur basierend auf einem Verständnis der Indexdatenstruktur erstellt werden.
1. Indexspezifikationen erstellenBevor Sie die Indexoptimierung erlernen, müssen Sie über ein gewisses Verständnis der Spezifikationen zum Erstellen von Indizes verfügen, die aus dem Alibaba-Entwicklungshandbuch stammen. Primärschlüsselindex: pk_column_column Eindeutiger Index: uk_column_column Gemeinsamer Index: idx_column_column 2. Gründe für IndexfehlerBeim Erstellen eines Index müssen Sie wissen, unter welchen Umständen der Index fehlschlägt. Nur wenn Sie die Gründe für Indexfehler verstehen, können Sie einige bekannte Fehler beim Erstellen des Index vermeiden. 1. Der Anführer kann nicht sterben Diese klassische Aussage beinhaltet die Tatsache, dass Sie beim Erstellen eines Index das Left-Extreme-Prinzip einhalten müssen. Die Tabellenstruktur ist beispielsweise Erstellen Sie einen Index mit dem Namen Die Abfragebedingung muss die Spalte u_name enthalten. 2. Führen Sie keine Operationen an der Indexspalte durch Führen Sie keine Berechnungen, Funktionen oder automatischen oder manuellen Typkonvertierungen an den Indexspalten durch, da sonst ein vollständiger Tabellenscan durchgeführt wird. Kurz gesagt: Führen Sie keine Operationen an der Indexspalte durch. 3. Die Typen der beiden Seiten sind nicht gleich Beispielsweise wird der Index idx_user_name erstellt und der Name-Feldtyp ist varchar Verwenden Sie bei der Abfrage Die korrekte Verwendung ist 4. Ungeeignete Like-Abfragen können zu Indexfehlern führen Erstellen Sie einen Index mit dem Namen idx_user_name Die Ausführungsanweisung lautet Die Ausführungsanweisung lautet Die Ausführungsanweisung lautet 5. Der Index nach der Bereichsbedingung wird ungültig Erstellen Sie einen Index mit dem Namen idx_user_name_age_sex Führen Sie die Anweisung Die obige SQL-Anweisung trifft nur auf die Namens- und Altersindizes, der Geschlechtsindex ist ungültig. Wenn ein zusammengesetzter Index fehlschlägt, müssen Sie nur die Länge von key_len überprüfen. Zusammenfassung: % Der Index wird später angefordert. Wenn ein überdeckender Index verwendet wird, kann jede Abfragemethode auf den Index zugreifen. Oben ist Kakas Zusammenfassung der Gründe, warum Indizes fehlschlagen können. In vielen Artikeln ist die MySQL-Version nicht gekennzeichnet, sodass Sie möglicherweise die Schlussfolgerung sehen, dass sie null ist oder dass Indizes fehlschlagen können. 3. Erklären Sie das Killer-Feature der SQL-OptimierungNachdem Sie die SQL-Anweisung geschrieben haben, müssen Sie sie unbedingt mit Explain überprüfen, um zu sehen, ob sie den Index trifft. Die folgende Abbildung zeigt das Ausgabeformat mit „explain“. Das Ausgabeformat wird im Folgenden kurz erläutert. 1. Die Spalte „id“ ist die Abfrage-ID. Wenn in der Abfrageanweisung keine Unterabfrage oder gemeinsame Abfrage vorhanden ist, ist diese ID immer 1. Wenn eine Unterabfrage oder eine Union-Abfrage vorhanden ist, wird diese Zahl erhöht. 2.Typ auswählen Die gebräuchlichsten Typen sind SIMPLE und PRIMARY und Sie müssen nur diese Spalten kennen. 3.Tabelle Verstehen Sie es einfach als den Tabellennamen 4. **Typ Diese Spalte ist eine der wichtigsten Spalten, auf die Sie bei der Optimierung von SQL-Anweisungen achten müssen. Diese Spalte zeigt, welchen Typ die Abfrage verwendet. Die folgenden sind in der Reihenfolge vom Besten bis zum Schlechtesten aufgeführt.
5.mögliche Schlüssel In dieser Spalte werden die möglichen Indizes angezeigt, die verwendet werden können. 6. **Schlüssel Der vom Optimierer gefundene Index aus Possible_Keys 7.Schlüssellänge Die Länge (Anzahl der Bytes) des für die Abfrage verwendeten Indexes. key_len berechnet nur die Länge des in der Where-Bedingung verwendeten Indexes. Auch wenn der Index zum Sortieren und Gruppieren verwendet wird, wird er in key_len nicht berechnet. 8.ref Wenn Sie eine Abfrage mit konstantem gleichen Wert verwenden, wird hier „const“ angezeigt. Wenn es sich um eine Join-Abfrage handelt, zeigt der Ausführungsplan der gesteuerten Tabelle die zugehörigen Felder der gesteuerten Tabelle an. Wenn die Bedingung einen Ausdruck oder eine Funktion verwendet oder eine interne implizite Konvertierung in der Bedingungsspalte erfolgt, wird sie möglicherweise als „func“ angezeigt. 9. **Zeilen Dies ist die MySQL-Schätzung der Anzahl der Zeilen, die gescannt werden müssen (kein genauer Wert). Dieser Wert zeigt direkt die Effizienz von SQL. Grundsätzlich gilt: je weniger Zeilen, desto besser. 10.gefiltert Diese Spalte gibt den Anteil der Anzahl der Datensätze an, die der Abfrage entsprechen, nachdem die von der Speicher-Engine zurückgegebenen Daten auf Serverebene gefiltert wurden. Beachten Sie, dass es sich um einen Prozentsatz und nicht um eine bestimmte Anzahl von Datensätzen handelt. 11. **extra In den meisten Fällen treten die folgenden Situationen auf.
12. Zusammenfassung Das Obige ist die Beschreibung aller Spalten in Explain. Im normalen Entwicklungsprozess achten wir normalerweise nur auf Typ, Schlüssel, Zeilen und zusätzliche Spalten.
4. SQL-Optimierungskiller: Langsame AbfrageWie oben erwähnt, können Sie „explain“ direkt verwenden, um zu analysieren, ob Ihre SQL-Anweisungen sinnvoll sind. Als Nächstes sprechen wir über langsame Abfragen. Überprüfen Sie, ob die langsame Abfrage aktiviert ist Prüfen Sie, ob SQL-Anweisungen, die keine Indizes verwenden, protokolliert werden Aktivieren Sie langsame Abfragen und zeichnen Sie SQL-Anweisungen auf, die keine Indizes verwenden Setzen Sie global log_queries_not_using_idnexes='on'. Setzen Sie global log_queries_not_using_indexes='on'. Überprüfen Sie, ob die beiden oben genannten Konfigurationen aktiviert sind Stellen Sie die langsame Abfragezeit ein, die Sie selbst steuern, normalerweise ist 1 Sekunde ausreichend. Wenn sich die Zeit nicht geändert hat, verbinden Sie den Client einfach erneut. Anzeigen des Speicherorts für langsame Abfragen Führen Sie dann eine beliebige Anweisung aus, die den Index nicht ausführt. Sie können diese Anweisung in diesem Protokoll sehen In der obigen Abbildung sind vor allem die Abfragezeit und der Inhalt der SQL-Anweisung zu beachten. Oben erfahren Sie, wie Sie mithilfe langsamer Abfragen SQL-Anweisungen anzeigen, bei denen es im Projekt zu Problemen kommt. 5. OptimierungsmethodeHier werde ich Ihnen einige häufig verwendete Lösungen zur Optimierung von SQL-Anweisungen vorstellen. Die beiden oben genannten Tools sollten gut eingesetzt werden, um uns beim Kampf gegen Monster zu helfen.
VI. FazitDamit ist dieser Artikel zu den wesentlichen Wissenspunkten für die MySQL-Abfrageoptimierung abgeschlossen. Weitere relevante Inhalte zur MySQL-Abfrageoptimierung 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:
|
<<: Spezifische Verwendung von CSS-Inhaltsattributen
>>: Docker-Protokolle - Zeigen Sie die Implementierung der Docker-Container-Protokolle an
1. Offizielle Website-Adresse Auf der offiziellen...
ZeicheneffekteImplementierungscode JavaScript var...
1. Befehlseinführung Der Befehl userdel (User Del...
Das Befehlsmuster ist ein Verhaltensentwurfsmuste...
In diesem Artikel erfahren Sie mehr über einen pr...
In diesem Artikel finden Sie das grafische Tutori...
Apache Tika ist eine Bibliothek zur Dateityperken...
Inhaltsverzeichnis 1. Warum brauchen wir Unit-Tes...
Vorwort Bei der täglichen Codeentwicklung gibt es...
Dieser Artikel erläutert anhand von Beispielen di...
Linux-Version: CentOS 7 [root@azfdbdfsdf230lqdg1b...
Detaillierte Erklärung der Rolle statischer Varia...
Wirkung Die Bilder im Code können selbst geändert...
Inhaltsverzeichnis 1. Szenenlayout 2. Fügen Sie e...
Darüber hinaus wird eine mit einem Blog-Programm e...