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)
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
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!