जैसा कि आपने दिखाया है, MySQL के पास ORDER BY ... LIMIT n
के साथ प्रश्नों के लिए दो वैकल्पिक क्वेरी प्लान हैं। :
- सभी योग्य पंक्तियाँ पढ़ें, उन्हें क्रमित करें, और n . चुनें शीर्ष पंक्तियाँ।
- पंक्तियों को क्रमबद्ध क्रम में पढ़ें और n . होने पर रुकें योग्य पंक्तियाँ मिल गई हैं।
यह तय करने के लिए कि कौन सा बेहतर विकल्प है, अनुकूलक को आपकी WHERE स्थिति के फ़िल्टरिंग प्रभाव का अनुमान लगाने की आवश्यकता है। यह सीधे आगे नहीं है, विशेष रूप से उन स्तंभों के लिए जो अनुक्रमित नहीं हैं, या उन स्तंभों के लिए जहां मान सहसंबद्ध हैं। आपके मामले में, ऑप्टिमाइज़र की अपेक्षा से पहले 25 क्वालीफाइंग पंक्तियों को खोजने के लिए शायद किसी को क्रमबद्ध क्रम में बहुत अधिक तालिका को पढ़ना होगा।
5.6 के बाद के रिलीज़ (आप एक प्री-जीए रिलीज़ पर चल रहे हैं!), और नए रिलीज़ (5.7, 8.0) दोनों में, LIMIT क्वेरी को कैसे हैंडल किया जाता है, इसमें कई सुधार हुए हैं। मेरा सुझाव है कि आप बाद की रिलीज़ में अपग्रेड करने का प्रयास करें, और देखें कि क्या यह अभी भी एक समस्या है।
सामान्य तौर पर, यदि आप क्वेरी प्लानर निर्णयों को समझना चाहते हैं, तो आपको क्वेरी के लिए ऑप्टिमाइज़र ट्रेस देखना चाहिए।