मेरा मानना है कि आपके पास जो क्वेरी है वह शायद तालिका में डेटा के एक बड़े प्रतिशत से मेल खा रही है। इस तरह की स्थितियों में, MySQL ऑप्टिमाइज़र अक्सर एक टेबल स्कैन करने और इंडेक्स को पूरी तरह से अनदेखा करने का विकल्प चुनता है, क्योंकि यह वास्तव में संपूर्ण इंडेक्स के अतिरिक्त पढ़ने की परेशानी से गुजरने और डेटा को चुनने के लिए इसका उपयोग करने से तेज़ है। तो इस मामले में, मैं अनुमान लगा रहा हूं कि public_private='yes' and approved='yes'
आपकी तालिका के एक अच्छे हिस्से से मेल खाता है। इसलिए, यदि MySQL इस वजह से अनुक्रमणिका का उपयोग करना छोड़ देता है, तो यह छँटाई के लिए भी उपलब्ध नहीं है।
यदि आप वास्तव में चाहते हैं कि यह एक अनुक्रमणिका का उपयोग करे, तो समाधान FORCE INDEX
का उपयोग करना होगा :
select * from videos FORCE INDEX (approved_2) where public_private='public' and approved='yes' order by number_of_views desc;
हालांकि, मैं यह सुनिश्चित करने के लिए कुछ परीक्षण चलाऊंगा कि आपको जो मिल रहा है वह वास्तव में MySQL अनुकूलक ने जो करना चुना है उससे तेज़ है। स्पष्ट रूप से अनुकूलक कुछ समस्याएं हैं ऑर्डर करने के लिए चयन करने के साथ, ताकि आप निश्चित रूप से इसे एक शॉट दे सकें और देखें कि क्या आपको बेहतर प्रदर्शन मिलता है।