अनुकूलन उद्देश्यों के लिए, अंगूठे का एक अच्छा नियम कम शामिल होना है, अधिक नहीं। वास्तव में, आपको जितनी हो सके उतनी कम पंक्तियों के साथ जितनी हो सके उतनी पंक्तियों में शामिल होने का प्रयास करना चाहिए। किसी भी अतिरिक्त जुड़ाव के साथ, आप लागत जोड़ने के बजाय लागत को गुणा करेंगे। क्योंकि MySQL मूल रूप से केवल एक बड़ा गुणा मैट्रिक्स उत्पन्न करेगा। हालांकि उनमें से बहुत कुछ अनुक्रमणिका और अन्य सामग्री द्वारा अनुकूलित हो जाता है।
लेकिन आपके प्रश्न का उत्तर देने के लिए:वास्तव में केवल एक बड़े जुड़ाव के साथ गिनना संभव है, यह मानते हुए कि तालिकाओं में अद्वितीय कुंजियाँ हैं और idalb एल्बम के लिए एक अद्वितीय कुंजी है। तब, और उसके बाद ही, आप इसे अपने कोड के समान कर सकते हैं:
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
जहां PrimaryKeyFields शामिल टेबल के प्राथमिक कुंजी फ़ील्ड के लिए खड़ा है (आपको उन्हें देखना होगा)।
Distinct
अन्य जॉइन की गिनती पर पड़ने वाले प्रभाव को हटा देगा। लेकिन दुर्भाग्य से, सामान्य तौर पर, distinct
जॉइन का लागत पर पड़ने वाले प्रभाव को नहीं हटाएगा।
हालाँकि, यदि आपके पास अनुक्रमणिकाएँ हैं जो आपकी तालिकाओं के सभी (idAlb + PrimaryKeyFields) -फ़ील्ड को कवर करती हैं, तो यह मूल समाधान जितना तेज़ हो सकता है (क्योंकि यह distinct
को अनुकूलित कर सकता है। छँटाई न करने के लिए) और जो आप सोच रहे थे उसके करीब आ जाएगा (बस एक बार हर टेबल/इंडेक्स के माध्यम से चलना)। लेकिन एक सामान्य या सबसे खराब स्थिति में, इसे एक उचित समाधान से भी बदतर प्रदर्शन करना चाहिए (जैसे स्लिमगॉस्ट का एक) - क्योंकि यह संदिग्ध है कि यह इष्टतम रणनीति ढूंढेगा। लेकिन इसके साथ खेलें और व्याख्याओं की जांच करें (और निष्कर्ष पोस्ट करें), शायद MySQL कुछ पागल कर देगा।