Sertai Pengoptimuman untuk Mengira Baris Berbeza
Apabila melakukan berbilang cantuman untuk mengira baris yang berbeza, adalah penting untuk mengoptimumkan pertanyaan anda untuk mengelakkan operasi yang tidak perlu. Satu kesilapan yang boleh membawa kepada isu prestasi yang ketara ialah menyertai lebih banyak jadual daripada yang diperlukan, kerana setiap penyertaan mendarabkan kos secara eksponen.
Daripada menggabungkan semua jadual bersama-sama, pendekatan yang lebih cekap ialah melakukan berbilang subkueri, setiap satu mengandungi satu gabungan. Ini membolehkan anda mengasingkan kiraan bagi setiap jadual dan mengelakkan pendaraban yang tidak perlu.
Berikut ialah contoh pertanyaan yang dioptimumkan menggunakan subkueri:
SELECT Titre, (SELECT COUNT(DISTINCT idPays) FROM pays_album WHERE idAlb IN (SELECT idAlb FROM album WHERE titreAlb = "LES CIGARES DU PHARAON")) AS Pays, (SELECT COUNT(DISTINCT idPers) FROM pers_album WHERE idAlb IN (SELECT idAlb FROM album WHERE titreAlb = "LES CIGARES DU PHARAON")) AS Personnages, (SELECT COUNT(DISTINCT idJur) FROM juron_album WHERE idAlb IN (SELECT idAlb FROM album WHERE titreAlb = "LES CIGARES DU PHARAON")) AS Jurons FROM album WHERE titreAlb = "LES CIGARES DU PHARAON"
Pertanyaan ini memastikan bahawa setiap subkueri hanya menyertai yang diperlukan jadual, mengurangkan kos keseluruhan operasi. Dengan menggunakan berbilang subkueri, kami boleh melakukan berbilang kiraan dengan berkesan tanpa menggabungkan semua jadual bersama-sama.
Andaikan anda mempunyai kunci unik untuk jadual anda dan idAlb ialah kunci unik untuk album. Dalam kes itu, anda juga boleh menggunakan gabungan tunggal dengan DISTINCT untuk mengira baris dengan pertanyaan berikut:
SELECT alb.titreAlb AS Titre, COUNT(DISTINCT payalb.idAlb) AS Pays, COUNT(DISTINCT peralb.idAlb) AS Personnages, COUNT(DISTINCT juralb.idAlb) 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
Dalam pertanyaan ini, DISTINCT mengalih keluar pendua yang disebabkan oleh cantuman, membolehkan anda mengira yang berbeza baris dengan betul. Walau bagaimanapun, kaedah ini masih melibatkan penggabungan semua jadual, jadi ia mungkin tidak selalu menjadi penyelesaian yang paling berkesan.
Dengan mengoptimumkan proses penyertaan, anda boleh meminimumkan kos pengiraan dan meningkatkan prestasi pertanyaan anda, terutamanya untuk set data yang besar. Ingat untuk menilai data dan skema khusus anda untuk menentukan strategi pengoptimuman yang paling sesuai.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Gabungan untuk Mengira Baris Berbeza dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!