Mengapa Pertanyaan Paparan Menunjukkan Percanggahan Prestasi Berbanding Pertanyaan Jadual Langsung?

Susan Sarandon
Lepaskan: 2024-10-23 23:13:29
asal
375 orang telah melayarinya

Why Does a View Query Exhibit a Performance Discrepancy Compared to a Direct Table Query?

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan