Heim >Datenbank >MySQL-Tutorial >Warum verursacht eine Ansicht deutlich höhere Kosten als die Ausführung derselben Abfrage für eine zugrunde liegende Tabelle?

Warum verursacht eine Ansicht deutlich höhere Kosten als die Ausführung derselben Abfrage für eine zugrunde liegende Tabelle?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-24 00:26:29686Durchsuche

Why Does a View Show Significantly Higher Cost Than Executing Same Query on an Underlying Table?

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!

Stellungnahme:
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