Heim >Datenbank >MySQL-Tutorial >Warum verursacht eine Ansicht deutlich höhere Kosten als die Ausführung derselben Abfrage für eine zugrunde liegende Tabelle?
MySQL View-Leistungsprobleme
Problem:
Ein Benutzer hat eine Abfrage für eine Tabelle mit 100.000 Zeilen, was einen hohen Aufwand (5200) beim Filtern nach einem bestimmten Status anzeigt. Das Erstellen einer Ansicht mit derselben aggregierten Abfrage und das Filtern der Ansicht führt zu deutlich höheren Kosten (100.000).
Erklärung:
Die Kostendiskrepanz ist darauf zurückzuführen Der verwendete Ansichtsalgorithmus. Der Standardalgorithmus für Ansichten ist temptable, der alle Zeilen aus der zugrunde liegenden Tabelle abruft und dann den Filter anwendet. Dies kann zu einer schlechten Leistung führen, wenn die Filterung auf einem kleinen Prozentsatz von Zeilen basiert.
Lösung:
Um dieses Problem zu beheben, sollte die Ansicht mit definiert werden merge-Algorithmus, der die Verwendung von Indizes für die zugrunde liegende Tabelle ermöglicht und die Filtereffizienz verbessert. Dies kann mit der folgenden Syntax erfolgen:
<code class="sql">CREATE OR REPLACE VIEW vw_users AS SELECT state, COUNT(*) AS cnt FROM users WITH MERGE VIEW;</code>
Mit dem Zusammenführungsalgorithmus kann die Abfrage der Ansicht nun den Index der Statusspalte nutzen, wodurch die Kosten gesenkt und die Leistung verbessert werden.
Das obige ist der detaillierte Inhalt vonWarum verursacht eine Ansicht deutlich höhere Kosten als die Ausführung derselben Abfrage für eine zugrunde liegende Tabelle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!