Percanggahan Prestasi Pertanyaan MySQL View
Masalah:
Jadual pangkalan data yang mengandungi kira-kira 100,000 pengguna rekod menunjukkan perbezaan prestasi yang ketara antara pertanyaan langsung dan pertanyaan menggunakan paparan. Pertanyaan yang mengakses terus jadual mempunyai kos pelan sebanyak 5200, manakala pertanyaan yang mengakses paparan mempunyai kos pelan sebanyak 100,000.
Penjelasan:
Percanggahan prestasi ialah disebabkan oleh algoritma yang digunakan untuk melaksanakan paparan. Pandangan dalam kes ini menggunakan algoritma "tergoda", yang mendapatkan semula semua baris daripada jadual asas ke dalam jadual sementara sebelum melaksanakan operasi penapisan yang ditentukan oleh klausa WHERE. Sebaliknya, pertanyaan langsung menggunakan algoritma "gabung", yang menjalankan operasi penapisan secara langsung pada data diindeks jadual asas.
Klausa WHERE dalam Paparan
Klausa WHERE dalam paparan digunakan selepas paparan mendapatkan semula semua baris daripada jadual asas. Ini bermakna walaupun paparan mungkin telah dibuat dengan kriteria penapis tertentu, klausa WHERE dalam pertanyaan terhadap paparan masih digunakan pada setiap baris yang diambil daripada jadual sementara.
Resolusi
Untuk menyelesaikan isu prestasi ini, paparan harus dibuat menggunakan algoritma "gabungan". Ini boleh dicapai dengan menggunakan pilihan "pandangan terwujud". Pandangan terwujud ialah salinan pandangan yang dikira sebelumnya. Ia disimpan dalam jadual fizikal, supaya pertanyaan terhadap paparan terwujud boleh menggunakan algoritma "gabungan" untuk penapisan.
Contoh:
Untuk mencipta paparan terwujud menggunakan algoritma "gabungan", gunakan sintaks berikut:
<code class="sql">CREATE MATERIALIZED VIEW vw_users AS SELECT state, COUNT(*) AS cnt FROM users GROUP BY state;</code>
Setelah paparan terwujud telah dibuat, pertanyaan terhadapnya akan mempunyai kos pelan yang lebih rendah dan prestasi yang lebih baik.
Atas ialah kandungan terperinci Mengapa Pertanyaan Paparan Menunjukkan Percanggahan Prestasi Berbanding Pertanyaan Jadual Langsung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!