मैं कैसे बता सकता हूं कि क्या MySQL में सॉर्ट करने के लिए एक इंडेक्स का उपयोग किया जा रहा है?


10

मेरे पास ORDER BY क्लॉज के साथ एक क्वेरी है जो एक कॉलम का उपयोग करता है जो एक इंडेक्स पर अंतिम कॉलम है जिसका उपयोग WHERE क्लॉज में किया जा रहा है, अनिवार्य रूप से:

SELECT
  cols
FROM
  tables
WHERE
  col_1 = x
  AND col_2 = y
  AND col_3 = z
ORDER BY col_4

और उस क्रम में कॉलम (col_1, col_2, col_3, col_4) पर सूचकांक बनाया जाता है।

जब मैं 99% से अधिक समय के क्वेरी को "सॉर्टिंग परिणाम" स्थिति में बिताता हूं। col_4 एक टाइमस्टैम्प कॉलम है अगर इससे कोई अंतर पड़ता है। मैं समझता हूं कि ORDER BY कुछ विशेष परिस्थितियों में केवल एक इंडेक्स का उपयोग कर सकता है, लेकिन मैं अभी भी थोड़ा सा चकित हूं कि जब आशावादी ऐसा करेगा।

जवाबों:


13

आपको EXPLAIN EXTENDEDक्वेरी से पहले संलग्न होना चाहिए और परिणाम स्वयं देखना चाहिए ।

इसके लिए एक प्रविष्टि होनी चाहिए

  • possible_keys

यदि यह कॉलम NULL है, तो कोई प्रासंगिक अनुक्रमणिका नहीं हैं। इस स्थिति में, आप यह जांचने में सक्षम हो सकते हैं कि WHERE क्लॉज की जांच करके यह पता लगाया जा सकता है कि यह कुछ कॉलम या स्तंभों को संदर्भित करता है जो अनुक्रमण के लिए उपयुक्त होगा।

तथा

  • चांबियाँ

कुंजी कॉलम उस कुंजी (इंडेक्स) को इंगित करता है जिसे MySQL ने वास्तव में उपयोग करने का निर्णय लिया था। यदि MySQL पंक्तियों को देखने के लिए संभव_की अनुक्रमणिकाओं में से एक का उपयोग करने का निर्णय लेता है, तो उस सूचकांक को प्रमुख मूल्य के रूप में सूचीबद्ध किया जाता है।

अधिक जानकारी के लिए आप इस आउटपुट को समझा सकते हैं और join_types को समझा सकते हैं


मैं समझता हूं, मेरा प्रश्न विशेष रूप से, ORDER BY खंड के साथ करना है। मेरी क्वेरी वापस लौटी पंक्तियों को प्रतिबंधित करने के लिए निर्दिष्ट इंडेक्स का उपयोग कर रही है, लेकिन जिस प्रकार का अनुमान लगा रहा हूं, उसके प्रदर्शन को देखते हुए इसे ORDER BY क्लॉज के लिए उपयोग नहीं कर रहा है।
क्रिस कूपर

1
कुछ मामलों में, MySQL किसी भी अतिरिक्त छँटाई किए बिना एक आदेश द्वारा खंड को संतुष्ट करने के लिए एक सूचकांक का उपयोग कर सकता है। सूचकांक का उपयोग तब भी किया जा सकता है, जब ORDER BY सूचकांक से बिल्कुल मेल नहीं खाता है, जब तक कि सूचकांक के सभी अप्रयुक्त भाग और सभी अतिरिक्त ORDER BY कॉलम WHERE क्लॉज में स्थिरांक हैं। निम्नलिखित प्रश्न सूचकांक का उपयोग करके ORDER को हल करने के लिए इस dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html
Mahesh Patil

1

आप EXPLAINअपनी क्वेरी ( explain select-or-whatever-your-query-is) पर उपयोग करें ।

possible_keysजो इस्तेमाल किया जा सकता है उसे दिखाओ, keyजो वास्तव में उपयोग किया जाता है।


1
इसे जोड़ने के लिए: explain format=json select ...और भी अधिक शक्तिशाली है। इसमें शामिल है used_key_parts, जो आपको बताता है कि समग्र कुंजी का आंशिक रूप से या पूरी तरह से उपयोग किया गया था, और आपको index_conditionयह बताएगा कि क्वेरी का कौन सा हिस्सा जिम्मेदार है।
ओकेडिट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.