अनुक्रमण विकल्पों के लिए Oracle दस्तावेज़ में उत्कृष्ट विचार हैं:http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/data_acc.htm#PFGRF004
19c के लिए अद्यतन:https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/designing-and-developing-for-performance.html#GUID-99A7FD1B-CEFD-4E91-9486- 2CBBFC2B7A1D
उद्धरण:
-
WHERE क्लॉज़ में अक्सर उपयोग की जाने वाली अनुक्रमण कुंजियों पर विचार करें।
-
अनुक्रमण कुंजियों पर विचार करें जिनका उपयोग अक्सर SQL कथनों में तालिकाओं में शामिल होने के लिए किया जाता है। जुड़ने के अनुकूलन के बारे में अधिक जानकारी के लिए, "प्रदर्शन के लिए हैश क्लस्टर का उपयोग करना" अनुभाग देखें।
-
उच्च चयनात्मकता वाली अनुक्रमणिका कुंजियाँ चुनें। अनुक्रमणिका की चयनात्मकता तालिका में पंक्तियों का प्रतिशत है जिसमें अनुक्रमित कुंजी के लिए समान मान होता है। यदि कुछ पंक्तियों का मान समान हो तो अनुक्रमणिका की चयनात्मकता इष्टतम होती है। नोट:Oracle स्वचालित रूप से इंडेक्स बनाता है, या मौजूदा इंडेक्स का उपयोग करता है, अद्वितीय और प्राथमिक कुंजी की कुंजियों और अभिव्यक्तियों पर, जिन्हें आप अखंडता बाधाओं के साथ परिभाषित करते हैं। कम चयनात्मकता कॉलम को अनुक्रमणित करना मददगार हो सकता है यदि डेटा वितरण तिरछा हो ताकि एक या दो मान अधिक हों अन्य मूल्यों की तुलना में कम बार।
-
कुछ विशिष्ट मानों वाली कुंजियों या व्यंजकों पर मानक B-वृक्ष अनुक्रमणिका का उपयोग न करें। ऐसी कुंजियों या अभिव्यक्तियों में आमतौर पर खराब चयनात्मकता होती है और इसलिए प्रदर्शन को तब तक अनुकूलित नहीं करते जब तक कि अक्सर चयनित कुंजी मान अन्य प्रमुख मानों की तुलना में कम बार दिखाई न दें। आप ऐसे मामलों में बिटमैप इंडेक्स का प्रभावी ढंग से उपयोग कर सकते हैं, जब तक कि इंडेक्स को बार-बार संशोधित न किया जाए, जैसा कि एक उच्च समवर्ती OLTP एप्लिकेशन में होता है।
-
उन स्तंभों को अनुक्रमित न करें जिन्हें बार-बार संशोधित किया जाता है। अनुक्रमित स्तंभों को संशोधित करने वाले अद्यतन विवरण और अनुक्रमित तालिकाओं को संशोधित करने वाले INSERT और DELETE कथनों में कोई अनुक्रमणिका न होने की तुलना में अधिक समय लगता है। इस तरह के SQL स्टेटमेंट को इंडेक्स में डेटा के साथ-साथ टेबल में डेटा को भी संशोधित करना चाहिए। वे अतिरिक्त पूर्ववत और पुन:उत्पन्न भी करते हैं।
-
उन कुंजियों को अनुक्रमित न करें जो केवल WHERE क्लॉज़ में फ़ंक्शंस या ऑपरेटरों के साथ दिखाई देती हैं। एक WHERE क्लॉज जो MIN या MAX के अलावा किसी फ़ंक्शन का उपयोग करता है, या एक अनुक्रमित कुंजी वाला ऑपरेटर फ़ंक्शन-आधारित इंडेक्स को छोड़कर इंडेक्स का उपयोग करने वाला एक्सेस पथ उपलब्ध नहीं कराता है।
-
उन मामलों में संदर्भात्मक अखंडता बाधाओं की विदेशी कुंजियों को अनुक्रमित करने पर विचार करें जिनमें बड़ी संख्या में समवर्ती INSERT, UPDATE, और DELETE कथन पैरेंट और चाइल्ड टेबल तक पहुंचते हैं। ऐसा इंडेक्स चाइल्ड टेबल को शेयर किए बिना पैरेंट टेबल पर UPDATEs और DELETEs की अनुमति देता है।
-
किसी कुंजी को अनुक्रमित करना चुनते समय, विचार करें कि क्या क्वेरी के लिए प्रदर्शन लाभ INSERTs, UPDATEs, और DELETEs के प्रदर्शन हानि और अनुक्रमणिका को संग्रहीत करने के लिए आवश्यक स्थान के उपयोग के लायक है। आप अनुक्रमणिका के साथ और बिना SQL कथनों के संसाधन समय की तुलना करके प्रयोग करना चाह सकते हैं। आप SQL ट्रेस सुविधा के साथ संसाधन समय को माप सकते हैं।