Heim > Datenbank > MySQL-Tutorial > Wie kann ich MySQL dazu bringen, Indizes für Ansichtsabfragen zu verwenden?

Wie kann ich MySQL dazu bringen, Indizes für Ansichtsabfragen zu verwenden?

Barbara Streisand
Freigeben: 2024-11-12 01:19:02
Original
744 Leute haben es durchsucht

How Can I Get MySQL to Use Indices for View Queries?

MySQL dazu bringen, einen Index für Ansichtsabfragen zu nutzen

Abfrage: Wie ermutige ich MySQL, einen Index zu nutzen? für eine Ansichtsabfrage?

Antwort: Auch wenn die Verwendung von Ansichten in MySQL möglicherweise nicht ideal ist, kann MySQL Indizes für Ansichtsabfragen verwenden, wenn entsprechende Indexstrukturen bereitgestellt werden.

Detaillierte Erklärung:

Die Ansichtsabfragen von MySQL unterscheiden sich von anderen Datenbanken, da der Optimierer keine Prädikate aus der äußeren Abfrage in die Ansichtsabfrage „pusht“. In diesem Fall filtert die äußere Abfrage nach „passed_in“, MySQL wendet diesen Filter jedoch nicht an, wenn die Ansichtsabfrage ausgeführt wird.

Infolgedessen wird die Ansichtsabfrage separat verarbeitet, wodurch eine temporäre Tabelle (eine abgeleitete Tabelle) erstellt wird. . Wenn die äußere Abfrage ausgeführt wird, verwendet sie die abgeleitete Tabelle als Zeilenquelle und wertet dann das Prädikat „haced_in = 2006“ aus.

Um die Leistung zu verbessern, kann ein abdeckender Index definiert werden:

CREATE INDEX highscores_IX3 ON highscores (player, happened_in, score)
Nach dem Login kopieren

Dieser Index umfasst alle Spalten, auf die in der Ansichtsabfrage verwiesen wird, mit „player“ als führende Spalte (Gleichheitsprädikat), gefolgt von „event_in“ (GROUP BY). Durch die Einbeziehung des Scores wird der Index zu einem abdeckenden Index, sodass MySQL alle erforderlichen Daten allein aus dem Index abrufen kann.

Alternativ sollten Sie die Verwendung einer eigenständigen Abfrage in Betracht ziehen, die keine abgeleitete Tabelle verwendet, was in einigen Fällen eine bessere Leistung bieten kann :

SELECT player, MAX(score) AS highest_score, happened_in
FROM highscores
WHERE player = 24 AND happened_in = 2006
GROUP BY player, happened_in
Nach dem Login kopieren

Mit dieser Änderung und einem geeigneten abdeckenden Index sollte MySQL in der Lage sein, die Ansichtsabfrage zu optimieren und die Leistung durch Nutzung der verfügbaren Indizes erheblich zu verbessern.

Das obige ist der detaillierte Inhalt vonWie kann ich MySQL dazu bringen, Indizes für Ansichtsabfragen zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage