mysql - How can I optimise this COUNT DISTINCT on joined InnoDB tables? -
SELECT COUNT (DISTINCT r.id) दृश्यों से INNER ईमेल में शामिल हों और v.email_id = e.id पर INNER को प्राप्तकर्ताओं पर शामिल करें e.recipient_id = r.id INNER अभियान c पर जाएं e.campaign_id = c.id WHERE c.centre_id IS नल है; ... या, "हमारे पास कितने अनूठे ईमेल खोलें? (सामान्य अभियान पर)"
वर्तमान में चलने के लिए लगभग एक मिनट और आधा एक अमेज़ॅन आरडीएस उदाहरण
- अभियान: : 1,380,000
EXPLAIN मुझे देता है:
<पूर्व> 1 सरल आरआईएस सूचकांक UNIQ_146632C4E7927C74 767 NULL 329196 सूचकांक 1 का उपयोग सरल और रेफरी प्राथमिक, IDX_4C81E852E92F8F78, IDX_4C81E852F639F774 IDX_4C81E852E92F8F78 111 ecomms .r.id 1 जहां 1 सरल वी रेफरी का उपयोग करना है IDX_11F09C87A832C1C9 IDX_11F09C87A832C1C9 111 ecomms.e.id 1 जहां का उपयोग करना; सूचकांक 1 का उपयोग सरल सी eq_ref प्राथमिक, IDX_E3737470463CD7C3 प्राथमिक 110 ecomms.e.campaign_id 1 का उपयोग करना मैं यह कुल तेजी लाने के लिए क्या कर सकता हूं?
आप प्राप्तकर्ताओं केवल में शामिल होने की आवश्यकता है, यदि आप < कोड> प्राप्तकर्ता.आईडी और emails.recipent_id , और आप उन प्राप्तकर्ताओं को बाहर करना चाहते हैं जो प्राप्तकर्ताओं में सूचीबद्ध नहीं हैं (अब तक नहीं) तालिका अन्यथा, उस मेज को सीधे शामिल होने से न छोड़ें; आप recipients.id के बजाय ईमेल .recipient_id का उपयोग कर सकते हैं। इस बात को छोड़कर कि बड़ी जीत होनी चाहिए।
वैकल्पिक रूप से, इस आधार पर शामिल होने से प्राप्तकर्ताओं को छोड़ दें कि यह प्रश्न के लिए प्रासंगिक नहीं है, जो अद्वितीय है ईमेल किसी भी ईमेल को खोलने के लिए, अनन्य प्राप्तकर्ताओं के बारे में नहीं खोलता है उस स्थिति में आपको सिर्फ SELECT COUNT (*) FROM ... में सक्षम होना चाहिए क्योंकि प्रत्येक ईमेल पंक्ति पहले से ही अनन्य है।
इसके अलावा , ऐसा लगता है कि आप पहले से ही अपने अनुक्रमों का अच्छा उपयोग कर रहे हैं, हालांकि मैं मानता हूँ कि मुझे एक्सप्लेन प्लान आउटपुट को पढ़ना मुश्किल है, खासकर हेडिंग के बिना। फिर भी, ऐसा लगता है कि आपकी क्वेरी आधार तालिकाओं को बिल्कुल भी नहीं पढ़ती है, इसलिए यह संभव नहीं है कि नए इंडेक्स जोड़कर मदद मिलेगी।
आप एक OPTIMIZE TABLE को निष्पादित करने की कोशिश कर सकते हैं आपकी क्वेरी में शामिल तालिकाओं, यद्यपि शायद यह अपेक्षा से अधिक उम्मीद की जा रही है।
क्वेरी ऑप्टिमाइज़र को देने के लिए आपको इस क्वेरी में शामिल तालिकाओं पर समय-समय पर ANALYZE TABLE चलाया जाना चाहिए सर्वोत्तम संभव योजना को चुनने की सबसे बड़ी संभावना ऐसा लगता है कि अनुकूलक पहले से ही एक उचित योजना चुनना चाहता है, हालांकि, इससे बहुत अधिक मदद नहीं मिल सकती है।
यदि आपको अभी भी बेहतर प्रदर्शन की आवश्यकता है तो वहां (तेज हार्डवेयर पर चलने सहित) हैं, लेकिन ये बहुत अधिक हैं यहाँ पर चर्चा करने के लिए।
Comments
Post a Comment