आपको हमेशा EXPLAIN
. का उपयोग करना चाहिए यह निर्धारित करने के लिए कि आपकी क्वेरी कैसे चलेगी।
दुर्भाग्य से, MySQL आपकी सबक्वेरी को एक डिपेंडेंट क्वेरी के रूप में निष्पादित करेगा, जिसका अर्थ है कि बाहरी क्वेरी में प्रत्येक पंक्ति के लिए सबक्वेरी चलाई जाएगी। आपको लगता है कि MySQL यह पता लगाने के लिए पर्याप्त स्मार्ट होगा कि सबक्वायरी एक सहसंबद्ध सबक्वायरी नहीं है और इसे केवल एक बार चलाएगा, हां, यह अभी तक स्मार्ट नहीं है।
तो, MySQL छात्रों में सभी पंक्तियों के माध्यम से स्कैन करेगा, प्रत्येक पंक्ति के लिए सबक्वायरी चलाएगा, और बाहरी क्वेरी पर किसी भी इंडेक्स का उपयोग नहीं करेगा।
क्वेरी को जॉइन के रूप में लिखने से MySQL को इंडेक्स का उपयोग करने की अनुमति मिल जाएगी, और निम्न क्वेरी इसे लिखने का सबसे अच्छा तरीका होगा:
SELECT COUNT(*) AS count
FROMstudents s
JOIN classes c
ON c.id = s.classes_id
AND c.departments_id = 1
WHERE s.status = 1
यह निम्नलिखित सूचकांकों का उपयोग करेगा:
students(`status`)
classes(`id`, `departements_id`) : multi-column index