कॉलम द्वारा ऑर्डर इंडेक्स होना चाहिए या नहीं?


35

मैंने अनुक्रमणिका को तालिका में जोड़ दिया है जिसका उपयोग खोज परिणाम के लिए किया जाता है। मैं ASC या DESC के आदेश से परिणाम दिखा रहा हूं। तो उस कॉलम में इंडेक्स होना चाहिए या नहीं? मेरे पास उस टेबल पर 2 और इंडेक्स हैं। उस स्तंभ पर अनुक्रमणिका बनाने या न बनाने से प्रदर्शन कैसे प्रभावित होगा?


2
कृपया क्वेरी
RolandoMySQLDBA

जवाबों:


26

हां, MySQL ORDER BY (कुछ शर्तों के तहत) में कॉलम पर एक इंडेक्स का उपयोग कर सकता है। हालाँकि, MySQL मिश्रित ASC, DESC ऑर्डर द्वारा ( SELECT * FROM foo ORDER BY bar ASC, pants DESC) के लिए एक इंडेक्स का उपयोग नहीं कर सकता है । आपकी क्वेरी और क्रिएट टेबल स्टेटमेंट साझा करने से हमें आपके प्रश्न का उत्तर देने में मदद मिलेगी।

ORDER को क्लाज के द्वारा कैसे अनुकूलित किया जाए, इस पर संकेत के लिए: http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html

2012-01-21 8:53 पूर्वाह्न संपादित करें

ORDER BY में मिश्रित ASC / DESC के साथ एक सूचकांक का उपयोग करने के बारे में मेरे बयान के स्रोत के बारे में प्रश्न थे। अनुकूलन दस्तावेज़ के आदेश से :

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

...

आप ASC और DESC मिलाते हैं:

सेलेक्ट * F1 से t1 ORDER द्वारा key_part1 DESC, key_part2 ASC;

...

इसके अलावा, DESC कीवर्ड क्रिएट इंडेक्स में अर्थहीन है

एक अनुक्रमणिका_col_name विनिर्देश ASC या DESC के साथ समाप्त हो सकता है। इन कीवर्ड्स को अनुक्रमणिका या अनुक्रमणित इंडेक्स वैल्यू स्टोरेज को निर्दिष्ट करने के लिए भविष्य के एक्सटेंशन के लिए अनुमति दी जाती है। वर्तमान में, उन्हें नजरअंदाज किया जाता है, लेकिन उन्हें नजरअंदाज कर दिया जाता है; सूचकांक मान हमेशा आरोही क्रम में संग्रहीत होते हैं।


3
"MySQL मिश्रित ASC, DESC के लिए एक इंडेक्स का उपयोग नहीं कर सकता है" । इसके लिए संदर्भ?
ypercube y

CREATE INDEX idx_foo ON foo(bar ASC, pants DESC);कार्य करना चाहिए।
फ्रैंक हाइकेन

मेरा स्रोत मेरे उत्तर में लिंक किए गए mysql प्रलेखन है। "मिक्स।"
आरोन ब्राउन

3
MySQL ने CREATE INDEX में asc और Desc को पार्स किया, लेकिन उन्हें अनदेखा कर दिया। सूचकांक हमेशा आरोही क्रम में संग्रहीत होते हैं। dev.mysql.com/doc/refman/5.5/en/create-index.html
हारून ब्राउन

1
नई MySQL 8.0 के साथ : अब के मिश्रण का उपयोग कर सकते हैं ASCऔर DESC यदिINDEX एक ही मिश्रण है।
रिक जेम्स

4

उत्तर के बारे में सोच रहे किसी के लिए भी क्योंकि यह PostgreSQL से संबंधित है, उत्तर है हां एक सूचकांक का उपयोग किया जाएगा। के अनुसार PostgreSQL प्रलेखन क्वेरी योजनाकार "एक उपलब्ध सूचकांक कि विनिर्देश से मेल खाता है स्कैन करके या तो विनिर्देश एक ORDER BY संतोषजनक पर विचार करेगी, या शारीरिक क्रम में तालिका स्कैनिंग और एक स्पष्ट तरह करने से।" इसका मतलब यह है कि अगर कोई सूचकांक है कि योजनाकार इसका उपयोग कर सकता है, तो मिलान पंक्तियों को पुनर्प्राप्त करने के बाद एक तरह से वापस गिर रहा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.