2011-06-30 13 views
6

MySQL अनुक्रमित का उपयोग नहीं किया गया लगता है का उपयोग करते हुए और निम्न क्वेरी पर filesort उपयोग कर रहा है:MySQL अनुक्रमणिका का उपयोग नहीं कर रहा है; filesort

SELECT `tweets`.* 
    FROM `tweets` 
    WHERE (`tweets`.contest_id = 159) 
ORDER BY tweet_id ASC, tweeted_at DESC LIMIT 100 OFFSET 0 

मैं जब मैं EXPLAIN EXTENDED, अतिरिक्त रिटर्न "जहाँ का उपयोग करते हुए निष्पादित contest_id, tweet_id पर और tweeted_at

अनुक्रमित है ; फाइलोर्ट का उपयोग कर "। मैं अपनी क्वेरी कैसे सुधार सकता हूं?

+0

क्या आपके पास एक प्रतियोगिता है जिसमें 'contest_id, tweet_id, tweeted_at' शामिल है? या वे एकाधिक सिंगल कॉलम इंडेक्स हैं? –

उत्तर

5

जब आप ASC और DESC सॉर्टिंग मिश्रण करते हैं, तो MySQL GROUP BY कथन को अनुकूलित करने के लिए इंडेक्स का उपयोग नहीं कर सकता है।

इसके अलावा, सॉर्ट करने के लिए एकाधिक कुंजी का उपयोग करने से परिणामस्वरूप यह इंडेक्स के साथ क्वेरी को अनुकूलित करने में सक्षम नहीं होगा।

डॉक्स से

:

http://dev.mysql.com/doc/refman/5.6/en/order-by-optimization.html

कुछ मामलों में, MySQL आदेश देकर हल करने अनुक्रमित उपयोग नहीं कर सकते हालांकि यह अभी भी अनुक्रमित का उपयोग करता पंक्तियों को कहां खंड से मेल खाते हैं खोजने के लिए । इन मामलों में शामिल हैं:

आप अलग अलग कुंजी पर आदेश द्वारा उपयोग करें:

चुनें * t1 आदेश से द्वारा कुंजी 1, कुंजी 2;

...

आप मिश्रण एएससी और DESC:

चुनें * t1 आदेश से द्वारा key_part1 DESC, key_part2 एएससी;

यदि आप जिन दो कॉलम पर ऑर्डर कर रहे हैं वे एक ही कुंजी का हिस्सा नहीं हैं, तो आप उपर्युक्त दोनों चीजें कर रहे हैं।

संबंधित मुद्दे