Pertanyaan untuk mengira pengguna dalam keadaan tertentu menunjukkan kos yang lebih tinggi dengan paparan berbanding langsung imbasan meja. Bagaimanakah klausa WHERE berfungsi dalam paparan dan bagaimanakah isu prestasi ini boleh diselesaikan?
Gelagat klausa WHERE dalam paparan ditentukan oleh algoritma paparan yang digunakan.
Biasanya, dalam paparan, klausa WHERE digunakan selepas paparan mendapatkan semula semua baris daripada jadual asas. Algoritma ini dikenali sebagai tergoda. Walau bagaimanapun, dalam kes ini, algoritma temptable tidak digunakan. Sebaliknya, algoritma cantum telah digunakan.
Algoritma cantuman adalah lebih cekap dalam kebanyakan kes tetapi tidak disokong apabila paparan mengandungi fungsi agregat (seperti COUNT()) atau klausa GROUP BY .
Untuk menyelesaikan isu ini, definisi paparan boleh diubah suai untuk menggantikan COUNT(*) dengan COUNT(KEADAAN DISTINCT). Ini akan memaksa MySQL menggunakan algoritma gabungan, yang boleh meningkatkan prestasi dengan ketara.
<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>
Atas ialah kandungan terperinci Bagaimana untuk Mengoptimumkan Prestasi Paparan Apabila WHERE Kesan Klausa Mengira Pertanyaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!