特定の状態のユーザーをカウントするクエリでは、直接クエリと比較してビューのコストが高くなります。テーブルスキャン。 WHERE 句はビューでどのように機能しますか?また、このパフォーマンスの問題はどのように解決できますか?
ビュー内の WHERE 句の動作は、使用されるビュー アルゴリズムによって決まります。
通常、ビューでは、WHERE 句は、ビューが基になるテーブルからすべての行を取得した後に適用されます。このアルゴリズムは temptable として知られています。ただし、この場合、temptable アルゴリズムは使用されませんでした。代わりに、merge アルゴリズムが採用されました。
ほとんどの場合、マージ アルゴリズムの方が効率的ですが、ビューに集計関数 (COUNT() など) または GROUP BY 句が含まれている場合はサポートされません。 .
この問題を解決するには、ビュー定義を変更して COUNT(*) を COUNT(DISTINCT state) に置き換えます。これにより、MySQL にマージ アルゴリズムの使用が強制され、パフォーマンスが大幅に向上します。
<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>
以上がWHERE 句がカウント クエリに影響を与える場合にビューのパフォーマンスを最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。