Können MySQL-Ansichten Indizes für Abfragen nutzen?
Es ist für MySQL nicht einfach, Indizes für Abfragen von Ansichten zu verwenden. Obwohl Indizes für zugrunde liegende Tabellen vorhanden sind, werden Ansichtsabfragen separat verarbeitet, was möglicherweise zu Ineffizienzen führt.
Lösung: Covering Index
Die optimale Lösung besteht darin, einen „Covering Index“ zu erstellen " auf der zugrunde liegenden Tabelle. Dieser Index sollte Spalten enthalten, auf die in der definierenden Abfrage der Ansicht verwiesen wird, sowie alle zur Gruppierung verwendeten Spalten. Ein abdeckender Index ermöglicht es MySQL, die Ansichtsabfrage direkt aus dem Index zu erfüllen, ohne dass auf die zugrunde liegenden Tabellenseiten zugegriffen werden muss.
Wenn man sich beispielsweise das bereitgestellte Beispiel mit der Highscore-Tabelle ansieht, kann ein abdeckender Index wie folgt aussehen:
CREATE INDEX highscores_IX3 ON highscores (player, happened_in, score);
Wenn dieser Index vorhanden ist, kann MySQL ihn für die Ansichtsabfrage nutzen:
SELECT * FROM v_kobe_highscores WHERE happened_in = 2006;
Warum Ansichten in MySQL problematisch sein können
Im Gegensatz zu einigen anderen Datenbanken „pusht“ MySQL keine Prädikate aus äußeren Abfragen in Ansichtsabfragen. Stattdessen wird die Ansichtsabfrage separat ausgeführt, wodurch eine Zwischentabelle entsteht, die alle Zeilen aus der Ansichtsdefinition enthält. Die äußere Abfrage wird dann auf diese abgeleitete Tabelle angewendet.
Dieser Prozess kann zu Leistungseinbußen führen, insbesondere bei Ansichten, die über große Tabellen hinweg definiert sind.
Alternative: Indizierte eigenständige Abfrage
In manchen Fällen kann es effizienter sein, eine eigenständige Abfrage auszuführen, anstatt eine Ansicht zu verwenden. Zum Beispiel:
SELECT player , MAX(score) AS highest_score , happened_in FROM highscores WHERE player = 24 AND happened_in = 2006 GROUP BY player , happened_in;
Mit einem geeigneten Abdeckungsindex für die Highscore-Tabelle kann diese Abfrage die gewünschten Daten effizient abrufen, ohne dass der Aufwand für die Erstellung und Materialisierung einer Ansicht anfällt.
Das obige ist der detaillierte Inhalt vonKönnen MySQL-Ansichten Indizes für effiziente Abfragen nutzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!