Heim > Datenbank > MySQL-Tutorial > Hauptteil

Können MySQL-Ansichten Indizes für effiziente Abfragen nutzen?

Susan Sarandon
Freigeben: 2024-11-10 00:47:02
Original
740 Leute haben es durchsucht

Can MySQL Views Leverage Indexes for Efficient Queries?

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);
Nach dem Login kopieren

Wenn dieser Index vorhanden ist, kann MySQL ihn für die Ansichtsabfrage nutzen:

SELECT * FROM v_kobe_highscores WHERE happened_in = 2006;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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!

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