Mengurangkan Kiraan Sertaan untuk Prestasi Pertanyaan Dioptimumkan
Dalam pengoptimuman pangkalan data, meminimumkan operasi gabungan adalah penting untuk meningkatkan kelajuan pertanyaan. Prinsip ini menentukan bahawa setiap gabungan menggandakan kos pertanyaan dan bukannya hanya menambahnya. Untuk menggambarkan konsep ini, mari kita selidiki masalah khusus dan teroka penyelesaian alternatif yang menggunakan lebih sedikit penyertaan.
Pertanyaan untuk Mengira Keputusan Sertaan
Pertimbangkan senario yang anda perlukan untuk mengira bilangan baris yang terhasil daripada tiga baris yang berasingan menyertai:
Lazimnya, pendekatan subquery , masing-masing melakukan gabungan dan a count:
-- Subquery 1 SELECT COUNT(*) FROM album alb LEFT JOIN pays_album payalb USING ( idAlb ) WHERE alb.titreAlb = "LES CIGARES DU PHARAON" -- Subquery 2 SELECT COUNT(*) FROM album alb LEFT JOIN pers_album peralb USING ( idAlb ) WHERE alb.titreAlb = "LES CIGARES DU PHARAON" -- Subquery 3 SELECT COUNT(*) FROM album alb LEFT JOIN juron_album juralb USING ( idAlb ) WHERE alb.titreAlb = "LES CIGARES DU PHARAON"
Walau bagaimanapun, adalah mungkin untuk mencapai hasil yang sama dengan satu pertanyaan:
SELECT alb.titreAlb AS "Titre", COUNT(DISTINCT payalb.idAlb, payalb.PrimaryKeyFields) AS "Pays", COUNT(DISTINCT peralb.idAlb, peralb.PrimaryKeyFields) AS "Personnages", COUNT(DISTINCT juralb.idAlb, juralb.PrimaryKeyFields) AS "Jurons" FROM album alb LEFT JOIN pays_album payalb USING ( idAlb ) LEFT JOIN pers_album peralb USING ( idAlb ) LEFT JOIN juron_album juralb USING ( idAlb ) WHERE alb.titreAlb = "LES CIGARES DU PHARAON" GROUP BY alb.titreAlb
Dengan menggunakan kata kunci DISTINCT, kesan gabungan tambahan pada kiraan adalah dinafikan. Pendekatan ini secara berkesan meniru tanggapan asal untuk meminimumkan cantuman, walaupun kelebihan prestasinya bergantung pada ketersediaan indeks yang optimum. Walau bagaimanapun, ia menyediakan alternatif yang berdaya maju bernilai pertimbangan.
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mengoptimumkan Prestasi Pertanyaan dengan Mengurangkan Kiraan Sertaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!