Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

प्रत्येक शामिल होने के लिए एक गिनती - अनुकूलन

अनुकूलन उद्देश्यों के लिए, अंगूठे का एक अच्छा नियम कम शामिल होना है, अधिक नहीं। वास्तव में, आपको जितनी हो सके उतनी कम पंक्तियों के साथ जितनी हो सके उतनी पंक्तियों में शामिल होने का प्रयास करना चाहिए। किसी भी अतिरिक्त जुड़ाव के साथ, आप लागत जोड़ने के बजाय लागत को गुणा करेंगे। क्योंकि 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 कुछ पागल कर देगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. किसी क्वेरी को छोड़कर उपयोग करते समय त्रुटि

  2. मैसकल:कुछ मूल्यों वाले समूहों का चयन कैसे करें?

  3. MySQL कार्यक्षेत्र में संग्रहीत प्रक्रिया को कैसे निष्पादित करें

  4. क्या mysqli_real_escape_string SQL इंजेक्शन या अन्य SQL हमलों से बचने के लिए पर्याप्त है?

  5. Apache 2.2, MySQL 5.0 और PHP 5 के साथ FreeBSD 6.0 में वेब सर्वर स्थापित करना - भाग 3