Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Keputusan dengan Cekap daripada Gabungan Pelbagai Pangkalan Data?

Bagaimana untuk Mengira Keputusan dengan Cekap daripada Gabungan Pelbagai Pangkalan Data?

Barbara Streisand
Barbara Streisandasal
2024-12-08 16:11:10220semak imbas

How to Efficiently Count Results from Multiple Database Joins?

Cara Mendapatkan Kiraan daripada Berbilang Gabungan dengan Kecekapan Optimum

Dalam pertanyaan pangkalan data, meminimumkan bilangan gabungan adalah penting untuk prestasi. Walau bagaimanapun, mungkin terdapat senario yang menggoda untuk melakukan berbilang cantuman sekaligus untuk mendapatkan berbilang kiraan. Mari kita terokai contoh dan bincangkan strategi pengoptimuman.

Pernyataan Masalah

Tugasnya ialah mengira baris yang dikembalikan oleh berbilang cantuman pada kunci utama yang sama. Pendekatan yang mudah melibatkan penciptaan subkueri individu untuk setiap penyertaan. Walau bagaimanapun, persoalan timbul: adakah terdapat cara yang lebih cekap untuk mencapai hasil yang sama menggunakan satu pertanyaan?

Percubaan Awal

Satu pendekatan ialah cuba mengira hasil gabungan berbilang menggunakan pernyataan kes, seperti yang ditunjukkan di bawah:

select alb.titreAlb as "Titre",
sum(case when alb.idAlb=payalb.idAlb then 1 else 0 end) "Pays",
sum(case when alb.idAlb=peralb.idAlb then 1 else 0 end) "Personnages",
sum(case when alb.idAlb=juralb.idAlb then 1 else 0 end) "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

Walau bagaimanapun, kaedah ini mengira jumlah bilangan baris merentas semua jadual yang dicantumkan, mengakibatkan keputusan yang salah.

Penyelesaian Pengoptimuman

Untuk mengoptimumkan pertanyaan dan mendapatkan kiraan berasingan bagi setiap penyertaan, anda boleh memanfaatkan DISTINCT dalam satu pertanyaan . Kunci unik diperlukan untuk setiap jadual yang terlibat dan lajur idalb mestilah kunci unik untuk jadual album. Pertanyaan yang disemak adalah seperti berikut:

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, distinct mengalih keluar kesan cantuman lain pada kiraan. Walau bagaimanapun, adalah penting untuk diingat bahawa berbeza tidak semestinya menghapuskan kos penyertaan. Jika indeks meliputi tersedia untuk semua medan (idAlb PrimaryKeyFields) bagi jadual, pendekatan ini mungkin menghasilkan kelajuan yang setanding dengan penyelesaian asal, di mana setiap cantuman dilakukan secara berasingan. Namun begitu, ujian dengan EXPLAIN boleh membantu menentukan strategi optimum.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Keputusan dengan Cekap daripada Gabungan Pelbagai Pangkalan Data?. 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