Überblick In einer relationalen Datenbank ist ein Index eine separate, physische Speicherstruktur, die die Werte einer oder mehrerer Spalten einer Datenbanktabelle sortiert. Es handelt sich dabei um eine Sammlung von Werten in einer oder mehreren Spalten einer Tabelle und eine entsprechende Liste logischer Zeiger auf die Datenseiten in der Tabelle, die diese Werte physisch identifizieren. MySQL unterstützt Hash- und B-Tree-Indizes. InnoDB und MyISAM unterstützen nur Btree-Indizes, während die Memory- und Heap-Speicher-Engines sowohl Hash- als auch Btree-Indizes unterstützen können. 1. Aktuelle Indexnutzung anzeigen Die aktuelle Indexnutzung können wir mit folgender Anweisung abfragen:
Tatsächlich ist in vielen Anwendungsszenarien der Wert von Handler_read_key sehr hoch, wenn der Index funktioniert. Dieser Wert gibt an, wie oft eine Zeile den Indexwert liest. Ein sehr niedriger Wert zeigt an, dass die durch das Hinzufügen des Index erzielte Leistungsverbesserung nicht hoch ist, da der Index nicht häufig verwendet wird. Ein hoher Wert für Handler_read_rnd_next bedeutet, dass Abfragen ineffizient ausgeführt werden und dies durch Indizierung behoben werden sollte. Dieser Wert gibt die Anzahl der Anforderungen zum Lesen der nächsten Zeile in der Datendatei an. Wenn eine große Anzahl von Tabellenscans durchgeführt wird, weist ein hoher Wert für Handler_read_rnd_next normalerweise darauf hin, dass die Tabelle nicht richtig indiziert ist oder dass die geschriebenen Abfragen die Indizes nicht nutzen. 2. Prüfen Sie, ob der Index verwendet wird WÄHLEN Objekttyp, Objektschema, Objektname, Indexname, zähle_sterne, Anzahl der Lesevorgänge, ANZAHL_ABRUFEN AUS PERFORMANCE_SCHEMA.table_io_waits_summary_by_index_usage; Wenn die Anzahl der Lese- und Abrufvorgänge beide 0 sind, bedeutet dies, dass es nicht verwendet wurde. 3. Überprüfen Sie, welche Indizes verwendet werden Erläutern Sie das entsprechende SQL und überprüfen Sie den Typ, um zu sehen, welcher Indextyp in der Abfrage verwendet wird. +-----+-------+-------+-----+--------+-----------+---------+-----------+ | ALLE | Index | Bereich | Ref | eq_ref | const | System | NULL | +-----+-------+-------+-----+--------+-----------+---------+-----------+ Vom Besten zum Schlechtesten sind dies: System > const > eq_ref > ref > Volltext > ref_or_null > Index_Merge > eindeutige Unterabfrage > Index_Unterabfrage > Bereich > Index > ALLE
Hier übrigens noch ein paar Optimierungspunkte: 1. Optimieren Sie die Insert-Anweisung:
2. Optimieren Sie die Group-By-Anweisung: Standardmäßig sortiert MySQL alle „Group by“-Felder, was „Order by“ ähnelt. Wenn die Abfrage eine Gruppierung nach enthält, der Benutzer jedoch die Verwendung sortierter Ergebnisse vermeiden möchte, können Sie „order by null“ angeben, um die Sortierung zu unterdrücken. 3. Optimieren Sie die Order-By-Anweisung: In einigen Fällen kann MySQL einen Index verwenden, um die ORDER BY-Klausel zu erfüllen, wodurch die Notwendigkeit einer zusätzlichen Sortierung entfällt. Die Where-Bedingung und Order By verwenden denselben Index, und die Order By-Reihenfolge ist dieselbe wie die Indexreihenfolge, und die Order By-Felder erfolgen in aufsteigender oder absteigender Reihenfolge. 4. Verschachtelte Abfragen optimieren: MySQL 4.1 unterstützt nun Unterabfragen, aber in manchen Fällen können Unterabfragen durch effizientere Verknüpfungen ersetzt werden, insbesondere wenn die zu verknüpfende passive Tabelle einen Index hat. Der Grund dafür ist, dass MySQL keine temporäre Tabelle im Speicher erstellen muss, um diese Abfrage abzuschließen, die logischerweise zwei Schritte erfordert. Zum Schluss noch ein Punkt: Eine Tabelle kann maximal 16 Indizes haben und die maximale Indexlänge beträgt 256 Byte. Indizes beeinträchtigen die Einfügeleistung im Allgemeinen nicht wesentlich (außer bei großen Mengen kleiner Daten), da der Zeitaufwand zum Erstellen eines Indexes O(1) oder O(logN) beträgt. Allerdings sind zu viele Indizes auch nicht gut, denn für Vorgänge wie Aktualisierungen ist die Pflege der Indizes erforderlich. Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: Praxis der Verwendung von Vite2+Vue3 zum Rendern von Markdown-Dokumenten
>>: Verwendung des Linux-Watch-Befehls
Zeigen Sie die IP-Adresse des Containers an docke...
Machen Sie sich keine Sorgen, wenn Sie das Wagenr...
Ich habe vor, die internen Dokumente des Unterneh...
Aktuell besteht die Anforderung, dass beim Klicke...
[LeetCode] 181.Mitarbeiter verdienen mehr als ihr...
In diesem Artikel wird der spezifische Code von U...
CSS-Selektoren Durch Festlegen des Stils für das ...
Notieren Sie die Problempunkte der MySQL-Produkti...
In diesem Artikel wird der spezifische JavaScript...
Dieser Artikel beschreibt das Beispiel der MySQL-...
In diesem Artikelbeispiel wird der spezifische Ja...
Wie unten dargestellt: XML/HTML-CodeInhalt in die...
1. Wechseln Sie in das Verzeichnis /etc/init.d: ...
Problem: Das PHP-Programm auf einem Server kann k...
NERDTree ist ein Dateisystembrowser für Vim. Mit ...