Eine Abfrage zum Zählen von Benutzern in einem bestimmten Bundesstaat zeigt höhere Kosten bei einer Ansicht im Vergleich zu einer direkten Tabellenscan. Wie funktioniert die WHERE-Klausel in Ansichten und wie kann dieses Leistungsproblem gelöst werden?
Das Verhalten der WHERE-Klausel in Ansichten wird durch den verwendeten Ansichtsalgorithmus bestimmt.
Normalerweise wird in einer Ansicht die WHERE-Klausel angewendet, nachdem die Ansicht alle Zeilen aus der zugrunde liegenden Tabelle abgerufen hat. Dieser Algorithmus ist als temptable bekannt. Allerdings wurde in diesem Fall der temptable-Algorithmus nicht verwendet. Stattdessen wurde der merge-Algorithmus verwendet.
Der Merge-Algorithmus ist in den meisten Fällen effizienter, wird jedoch nicht unterstützt, wenn die Ansicht Aggregatfunktionen (wie COUNT()) oder eine GROUP BY-Klausel enthält .
Um dieses Problem zu beheben, kann die Ansichtsdefinition geändert werden, um COUNT(*) durch COUNT(DISTINCT state) zu ersetzen. Dadurch wird MySQL gezwungen, den Zusammenführungsalgorithmus zu verwenden, was die Leistung erheblich verbessern kann.
<code class="sql">CREATE OR REPLACE VIEW vw_users AS SELECT state, COUNT(DISTINCT state) AS cnt FROM users; EXPLAIN SELECT cnt FROM vw_users WHERE state = 'ca';</code>
Das obige ist der detaillierte Inhalt vonWie kann die Anzeigeleistung optimiert werden, wenn sich die WHERE-Klausel auf die Anzahl der Abfragen auswirkt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!