Rumah >pangkalan data >tutorial mysql >Bolehkah Gabungan Tunggal Menggantikan Berbilang Subkueri untuk Pengiraan Baris yang Cekap dalam Pengoptimuman Pangkalan Data?
Kiraan Satu Pertanyaan untuk Setiap Pengoptimuman Sertaan
Dalam pengoptimuman pangkalan data, adalah penting untuk meminimumkan penyertaan. Setiap gabungan tambahan menggandakan kos pemprosesan, menghasilkan pengiraan matriks yang besar yang boleh mencabar untuk enjin pangkalan data. Walau bagaimanapun, adalah mungkin untuk mengoptimumkan pertanyaan dengan mengira dengan satu cantuman.
Pertimbangkan tugas mengira bilangan baris yang terhasil daripada cantuman antara jadual dalam senario tertentu. Walaupun menggunakan berbilang subkueri untuk cantuman berasingan ialah pendekatan yang mudah, ia patut diterokai sama ada satu pertanyaan boleh menjadi lebih cekap.
Untuk mencapai matlamat ini, jadual yang terlibat mesti mempunyai kunci unik dan medan cantuman (cth., "idAlb ") mestilah kunci unik untuk jadual utama (cth., "album"). Dengan syarat ini dipenuhi, adalah mungkin untuk menggunakan versi diubah suai bagi pertanyaan asal:
select alb.titreAlb as "Titre", count(distinct payalb.idAlb, payalb.PrimaryKeyFields) "Pays", count(distinct peralb.idAlb, peralb.PrimaryKeyFields) "Personnages", count(distinct juralb.idAlb, juralb.PrimaryKeyFields) "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
Dalam pertanyaan ini, "PrimaryKeyFields" mewakili medan kunci utama bagi jadual yang dicantumkan. Menggunakan kata kunci "berbeza" menghapuskan kiraan pendua dan membantu mengoptimumkan kos. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa secara amnya, menggunakan "distinct" tidak akan menghapuskan sepenuhnya kos yang berkaitan dengan penyambungan itu sendiri.
Jika indeks optimum yang meliputi medan yang diperlukan telah disediakan, pendekatan ini mungkin berfungsi serta penyelesaian subquery. Walau bagaimanapun, dalam kebanyakan kes, ia lebih berkemungkinan kurang cekap disebabkan oleh keperluan enjin pangkalan data untuk mencari strategi pelaksanaan yang optimum. Adalah disyorkan untuk menguji dan menganalisis rancangan EXPLAIN untuk kedua-dua pendekatan untuk menentukan penyelesaian yang paling optimum untuk persediaan pangkalan data dan set data tertentu.
Atas ialah kandungan terperinci Bolehkah Gabungan Tunggal Menggantikan Berbilang Subkueri untuk Pengiraan Baris yang Cekap dalam Pengoptimuman Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!