Ü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
Inhaltsverzeichnis 1. Öffnen Sie das Projektverze...
Anforderungslogik Frontend --> Nginx über http...
Inhaltsverzeichnis umask Umask-Nutzung Prinzip 1....
Was ist der Nobody-Benutzer in Unix/Linux-Systeme...
Inhaltsverzeichnis 1. Grammatik 2. Beispiele 3. A...
React-Native-Installationsprozess 1.npx react-nat...
Der Textarea-Tag ist ein HTML-Tag, den wir häufig ...
Vorwort Dieser Artikel stellt hauptsächlich die r...
1. Spring Boot unterstützt kein JSP-JAR-Paket, JS...
Erstens weiß ich nicht, warum ich mich über die B...
01. Befehlsübersicht md5sum - MD5-Prüfcode berech...
Konfigurationsmethode für die installationsfreie ...
Gängige Szenarien für die Weiterleitung von Socke...
Was ist Inhaltsüberlauf? Wenn tatsächlich viel Te...
Wie unten dargestellt: Führen Sie hauptsächlich A...