क्या अनुक्रमणिका को परिभाषित करते समय स्तंभों के निश्चित क्रम में कोई लाभ होता है


13

उदाहरण के लिए, यदि मेरे पास दो सूचकांक हैं:

CREATE INDEX IDX_1 ON MY_TABLE_1
 (ITEM, DATE, LOCATION)
 COMPUTE STATISTICS;

CREATE INDEX IDX_2 ON MY_TABLE_1
 (DATE, LOCATION, ITEM)
 COMPUTE STATISTICS;

क्या यह IDX_2बेमानी होगा ? यदि नहीं, तो मैं कॉलम घोषित करने के क्रम का निर्धारण कैसे करूँ?

क्या मुझे नियमित प्रश्नों के लिए अनुक्रमणिका तैयार करनी चाहिए?

जवाबों:


12

हां, लाभ तब होता है जब आप सूचकांक के एक हिस्से पर क्वेरी करना चाहते हैं। यदि आप पार्ट-यूज्ड प्रेडिक्ट्स को डालते हैं तो पहले इंडेक्स का इस्तेमाल उन क्वेरी के लिए किया जा सकता है, जिसमें उन प्रीडेट्स शामिल होते हैं, लेकिन इंडेक्स के सभी कॉलम नहीं।

इसके अलावा, जब तक कि आपके पास अन्य आवश्यकताएं नहीं हैं, तब तक सबसे पहले चयनात्मक विधेय को लगाने में मदद मिल सकती है, क्योंकि इससे सूचकांक की तलाश तेजी से हो सकती है।

आपके मामले IDX_2में टेबल पर प्रश्नों की प्रकृति के आधार पर यह अनावश्यक रूप से आवश्यक नहीं है। हालाँकि, सभी कॉलमों को शामिल करना आवश्यक नहीं हो सकता है। यदि, उदाहरण के लिए, आप बहुत से प्रश्नों को करते हैं locationऔर dateफिर IDX_2उन प्रश्नों को हल करने में मदद करने के लिए उपयोगी हो सकते हैं IDX_1जो उस के लिए उपयोगी होने के लिए सही क्रम में नहीं हैं। हालाँकि, आप पा सकते हैं कि itemबेमानी है IDX_2

9i से, ओरेकल ने एक 'स्किप स्कैन' ऑपरेटर की शुरुआत की, जहां अनुक्रमणिका के स्तंभों को अधिक कुशलता से उद्धृत किया जा सकता है, जो इस प्रकार के पूरक सूचकांक की आवश्यकता को कम कर सकता है।

एक अधिक विशिष्ट मामले में, आप जानना चाहते हैं, तो itemद्वारा locationऔर dateऔर मेज से कुछ भी पढ़ने के लिए बिना किसी भी अन्य कॉलम फिर क्वेरी पूरी तरह से हालांकि सूचकांक हल किया जा सकता है की जरूरत नहीं है। आप गैर-अनुक्रमित स्तंभों को शामिल करने वाले अनुक्रमणिका भी बना सकते हैं। यदि आवश्यक कॉलम के सभी को कवरिंग इंडेक्स से हल किया जा सकता है तो क्वेरी को मुख्य तालिका को छूने की आवश्यकता नहीं है।

अंत में, अपने अंतिम प्रश्न के उत्तर में: यदि आपके पास नियमित रूप से उपयोग किए जाने वाले प्रश्नों का एक सेट है जो बहुत सारे संसाधनों का उपयोग कर रहे हैं और एक सूचकांक का उपयोग करके ट्यून किया जा सकता है तो यह निश्चित रूप से विचार करने योग्य है। हालाँकि, अनुक्रमणिका को आवेषण पर एक ओवरहेड के साथ आता है, इसलिए आपको ओवरहेड के विरुद्ध क्वेरी निष्पादन को व्यापार करना होगा जो कि अनुक्रमणिका सम्मिलित या अद्यतन पर काम करता है।


3
@ConcernedOfTunbridgeWells: अनुक्रमणिका कुंजी संपीड़न का उपयोग करने के लिए एक वैकल्पिक दृष्टिकोण है, और इसमें कम चयनात्मक (कम विशिष्ट मान) स्तंभ हैं। यह एक छोटे सूचकांक को जन्म देने में मदद करता है, जबकि अभी भी स्किप-स्कैन को अच्छी तरह से कार्य करने की अनुमति देता है।
एडम मस्क

2

ध्यान में रखने वाली एक और बात बहुत सारे शून्य मूल्यों वाले कॉलम हैं।

यदि इन स्तंभों को सूचकांक में उनके बाद निर्दिष्ट किया गया है, तो शून्य मानों को अनुक्रमित किया जाना है। अन्यथा, हमेशा की तरह, अशक्त मानों को अनुक्रमित नहीं किया जाता है (निश्चित रूप से, यह मान रहा है कि आप बी-ट्री इंडेक्स का उपयोग कर रहे हैं)।

इसलिए, यदि आपके पास बहुत अधिक संख्या में शून्य मान हैं, तो उन्हें इंडेक्स के अंत में रखने से आप डिस्क स्थान की एक महत्वपूर्ण राशि बचा सकते हैं।

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