Rumah >pangkalan data >tutorial mysql >Mengapa Paparan Menunjukkan Kos yang Jauh Lebih Tinggi Daripada Melaksanakan Pertanyaan Yang Sama pada Jadual Dasar?

Mengapa Paparan Menunjukkan Kos yang Jauh Lebih Tinggi Daripada Melaksanakan Pertanyaan Yang Sama pada Jadual Dasar?

Patricia Arquette
Patricia Arquetteasal
2024-10-24 00:26:29684semak imbas

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

Isu Prestasi MySQL View

Isu:

Seorang pengguna mempunyai pertanyaan terhadap jadual dengan 100,000 baris, yang menunjukkan kos yang tinggi (5200) apabila menapis berdasarkan keadaan tertentu. Mencipta paparan dengan pertanyaan agregat yang sama dan penapisan pada paparan menghasilkan kos yang jauh lebih tinggi (100,000).

Penjelasan:

Percanggahan dalam kos adalah disebabkan oleh algoritma paparan yang digunakan. Algoritma lalai untuk paparan ialah tergoda, yang mendapatkan semula semua baris daripada jadual asas dan kemudian menggunakan penapis. Ini boleh mengakibatkan prestasi yang lemah apabila penapisan adalah berdasarkan peratusan kecil baris.

Penyelesaian:

Untuk menyelesaikan isu ini, paparan harus ditakrifkan dengan Algoritma gabung, yang membolehkan indeks pada jadual asas digunakan dan meningkatkan kecekapan penapisan. Ini boleh dilakukan menggunakan sintaks berikut:

<code class="sql">CREATE OR REPLACE VIEW vw_users AS
SELECT state, COUNT(*) AS cnt
FROM users
WITH MERGE VIEW;</code>

Dengan algoritma gabungan, pertanyaan pada paparan kini boleh memanfaatkan indeks pada lajur keadaan, mengurangkan kosnya dan meningkatkan prestasi.

Atas ialah kandungan terperinci Mengapa Paparan Menunjukkan Kos yang Jauh Lebih Tinggi Daripada Melaksanakan Pertanyaan Yang Sama pada Jadual Dasar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn