Häufig fehlt das Verständnis für mehrspaltige Indizes. Ein häufiger Fehler besteht darin, unabhängige Indizes für viele Spalten einzurichten oder die Indexspalten in der falschen Reihenfolge zu verwenden. Wir werden das Problem der Indexspaltenreihenfolge im nächsten Artikel besprechen. Betrachten wir zunächst den Fall mehrerer unabhängiger Indizes und nehmen dabei die folgende Tabellenstruktur als Beispiel: CREATE TABLE-Test ( c1 INT, c2 INT, c3 INT, SCHLÜSSEL(c1), SCHLÜSSEL(c2), SCHLÜSSEL(c3), ); Die Verwendung dieser Indexierungsstrategie ist normalerweise das Ergebnis einer maßgeblichen Empfehlung (z. B. das Hinzufügen von Indizes zu den Bedingungsspalten, die in der WHERE-Bedingung verwendet werden). Tatsächlich ist das völlig falsch und ich würde bestenfalls einen Stern vergeben. Die Indizierung auf diese Weise ist um mehrere Größenordnungen langsamer als eine wirklich optimierte Indizierung. Wenn Sie manchmal keinen Index mit mehr als drei Sternen entwerfen können, ist es besser, sich auf die Optimierung der Zeilenreihenfolge oder die Erstellung abdeckender Indizes zu konzentrieren, als die WHERE-Bedingung zu ignorieren.
Das Erstellen separater Indizes für viele Spalten trägt in vielen Fällen nicht dazu bei, die Leistung von MySQL zu verbessern. MySQL 5.0 und höher kann dieses Design mithilfe einer Indexzusammenführungsstrategie leicht optimieren. Mit diesem Ansatz können Abfragen von Tabellen mit mehrspaltigen Indizes die Verwendung von Indizes zum Auffinden der erforderlichen Zeilen einschränken.
Frühere MySQL-Versionen konnten nur einen Index verwenden, sodass MySQL häufig einen vollständigen Tabellenscan durchführte, wenn keine Indexunterstützung vorhanden war. Beispielsweise verfügt die Tabelle „film_actor“ über einen Index für „film_id“ und „actor_id“, aber die Verwendung beider Indizes in der WHERE-Bedingung ist keine gute Wahl: WÄHLEN SIE film_id, actor_id FROM film_actor WHERE actor_id = 1 OR film_id = 1; In früheren MySQL-Versionen führt diese Abfrage zu einem vollständigen Tabellenscan, sofern Sie die beiden Abfragen nicht wie unten gezeigt zusammenführen. Wählen Sie Film-ID, Schauspieler-ID aus Film-Schauspieler, wobei Schauspieler-ID = 1 UNION ALL ist. Wählen Sie Film-ID, Schauspieler-ID aus Film-Schauspieler, wobei Film-ID = 1 und Schauspieler-ID <> 1 ist. In MySQL 5.0 und höher verwendet die Abfrage beide Indizes und führt die endgültigen Ergebnisse zusammen. Zur Umsetzung dieses Verfahrens sind drei Varianten des Algorithmus erforderlich:
Das Obige ist etwas verwirrend. Tatsächlich sollte es unter Verwendung einer einzigen Bedingung (um den Index zu verwenden) verteilt werden, um alle Daten zu finden und dann die Daten zu kombinieren. Lassen Sie uns dies mithilfe von EXPLAIN überprüfen. EXPLAIN SELECT `film_id`,`actor_id` FROM `film_actor` WHERE `actor_id`=1 OR `film_id`=1 Es ist ersichtlich, dass die Abfragemethode ein vollständiger Tabellenscan ist, aber Extra wird zur Optimierung verwendet. MySQL verwendet diese Technik bei der Verarbeitung komplexer Abfragen, daher sehen Sie in Extra möglicherweise verschachtelte Vorgänge. Diese Indexzusammenführungsstrategie kann manchmal gut funktionieren, sollte aber häufiger als Hinweis auf eine schlechte Indexverwendung betrachtet werden:
Wenn Sie bei der Verwendung der EXPLAIN-Analyse Indexzusammenführungen feststellen, sollten Sie die Abfrageanweisung und Tabellenstruktur überprüfen, um festzustellen, ob dies der optimale Ansatz ist. Sie können dies überprüfen, indem Sie die Indexzusammenführung mit optimizer_switch deaktivieren. Ändern Sie den Index von film_actor in einen gemeinsamen Index (löschen Sie die beiden ursprünglichen unabhängigen Indizes film_id und actor_id) und sehen Sie sich die Auswirkungen an. Sie können sehen, dass die vollständige Tabellenabfrage vermieden wird. ALTER TABLE film_actor ADD INDEX `sindex` (`film_id`,`actor_id`); Oben sind die Details zur Auswahl des unabhängigen MySQL-Index und des gemeinsamen Index aufgeführt. Weitere Informationen zum unabhängigen MySQL-Index und zum gemeinsamen Index finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erklärung des CSS3-Rotationswürfelproblems
>>: Mehrere beliebte Website-Navigationsrichtungen in der Zukunft
In diesem Artikelbeispiel wird der spezifische Co...
In diesem Artikel finden Sie das grafische Tutori...
In diesem Artikel wird der spezifische Code für J...
Erstellen Sie zunächst die Falldemonstrationstabe...
Inhaltsverzeichnis 1. Einleitung 2. Schnittstelle...
Einführung In den letzten Jahren wurde der Ruf na...
Uniapp-Code <Vorlage> <Ansicht> <i...
Die Fremdschlüsseleinschränkung von MySQL dient z...
Heute zeige ich Ihnen, wie Sie mit JavaScript ein...
Offizielle Docker-Dokumentation: https://docs.doc...
Werfen wir einen Blick auf ufw (Uncomplicated Fir...
Empfohlene Docker-Lernmaterialien: https://www.ru...
Kontroverse um Nofollow Zwischen Zac und Guoping ...
Verwandte Systemaufrufe für Dateioperationen erst...
Geben Sie den MySQL-Befehl ein: mysql -u+(Benutze...