हम इस पोस्ट में उदाहरण के साथ ओरेकल में ओरेकल इंडेक्स/इंडेक्स के प्रकारों पर चर्चा करेंगे। मैं ओरेकल में इंडेक्स बनाने के सभी विकल्पों पर प्रकाश डालूंगा। मैं यह भी चर्चा करूंगा कि ओरेकल में इंडेक्स साइज कैसे चेक करें। मुझे उम्मीद है कि आपको यह पोस्ट पसंद आएगी। मुझे इस पोस्ट पर प्रतिक्रिया की प्रतीक्षा रहेगी
Oracle अनुक्रमणिका क्या हैं?
- जिस तरह हमारे पास पाठ्यपुस्तकों में इंडेक्स मौजूद है जो हमें किताब में विशेष विषय खोजने में मदद करता है, ओरेकल इंडेक्स उसी तरह व्यवहार करता है। हमारे पास ओरेकल में विभिन्न प्रकार के इंडेक्स हैं।
- इंडेक्स का उपयोग ओरेकल तालिका में पंक्तियों को शीघ्रता से खोजने के लिए किया जाता है। यदि अनुक्रमणिका मौजूद नहीं है, तो चयन क्वेरी को पूरी तालिका को पढ़ना होगा और पंक्तियों को वापस करना होगा। अनुक्रमणिका के साथ, पंक्तियों को शीघ्रता से पुनर्प्राप्त किया जा सकता है
- किसी तालिका से पंक्तियों की एक छोटी संख्या प्राप्त करते समय हमें अनुक्रमणिका बनानी चाहिए। या कुछ क्वेरी से जितनी जल्दी हो सके पंक्तियों के पहले सेट को पुनः प्राप्त करने के लिए जो अंततः बड़ी संख्या में पंक्तियों को वापस कर देगा। यह डेटा वितरण यानी क्लस्टरिंग फैक्टर पर भी निर्भर करता है
- सूचकांक तार्किक और भौतिक रूप से सहयोगी तालिका के डेटा से स्वतंत्र होते हैं।
- इंडेक्स टेबल और क्लस्टर से जुड़ी वैकल्पिक संरचनाएं हैं। आप उस तालिका पर SQL कथन निष्पादन को गति देने के लिए तालिका के एक या अधिक स्तंभों पर अनुक्रमणिका बना सकते हैं।
- इंडेक्स डिस्क I/O को ठीक से उपयोग करने पर कम करने का प्राथमिक साधन हैं।
- क्वेरी शुरुआत में तय करती है कि इंडेक्स का इस्तेमाल करना है या नहीं
- इंडेक्स के साथ सबसे अच्छी बात यह है कि इंडेक्स किए गए डेटा का पुनर्प्राप्ति प्रदर्शन लगभग स्थिर रहता है, भले ही नई पंक्तियां डाली जाती हैं। हालांकि, एक टेबल पर कई इंडेक्स की उपस्थिति अपडेट, डिलीट और इंसर्ट के प्रदर्शन को कम कर देती है क्योंकि ओरेकल को टेबल से जुड़े इंडेक्स को भी अपडेट करना होगा।
- यदि आप तालिका के स्वामी हैं, तो आप अनुक्रमणिका बना सकते हैं या यदि आप किसी अन्य स्कीमा में तालिका के लिए अनुक्रमणिका बनाना चाहते हैं तो आपके पास या तो कोई भी अनुक्रमणिका सिस्टम विशेषाधिकार बनाएं या उस तालिका पर अनुक्रमणिका विशेषाधिकार होना चाहिए
तार्किक प्रकार के अनुक्रमणिका
यह सूचकांक की अनुप्रयोग विशेषताओं को परिभाषित करता है
अद्वितीय या गैर-अद्वितीय | एक अनुक्रमणिका अद्वितीय या गैर-अद्वितीय हो सकती है। Oracle प्राथमिक कुंजी और अद्वितीय कुंजी बाधाओं के लिए एक अद्वितीय अनुक्रमणिका बनाता है यदि उस स्तंभ पर गैर-अद्वितीय अनुक्रमणिका पहले से मौजूद हैं, तो यह Oracle में प्राथमिक कुंजी के लिए एक नया अद्वितीय अनुक्रमणिका नहीं बनाएगी |
समग्र | इंडेक्स में सिंगल या मल्टीपल कॉलम हो सकते हैं। कंपोजिट इंडेक्स सेलेक्ट स्टेटमेंट के लिए डेटा की पुनर्प्राप्ति को गति दे सकता है जिसमें WHERE क्लॉज कंपोजिट इंडेक्स में कॉलम के सभी या प्रमुख हिस्से को संदर्भित करता है। |
कार्य-आधारित अनुक्रमणिका | अनुक्रमित कॉलम का डेटा गणना पर आधारित है |
एप्लिकेशन डोमेन अनुक्रमणिका | इस अनुक्रमणिका का उपयोग विशेष अनुप्रयोगों (स्थानिक, पाठ) में किया जाता है।
|
ROWID छद्म स्तंभ क्या है
ROWID तालिका में प्रत्येक पंक्ति का पता देता है। Oracle प्रत्येक पंक्ति के लिए एक ROWID असाइन करता है। ROWID में निम्नलिखित शामिल हैं
- ऑब्जेक्ट का डेटा ऑब्जेक्ट नंबर
- डेटाफ़ाइल में डेटा ब्लॉक जिसमें पंक्ति रहती है
- डेटा ब्लॉक में पंक्ति की स्थिति (पहली पंक्ति 0 है)
- डेटाफ़ाइल जिसमें पंक्ति रहती है (पहली फ़ाइल 1 है)। फ़ाइल संख्या टेबलस्पेस के सापेक्ष है।
Oracle पंक्तियों तक पहुँचने के लिए आंतरिक रूप से ROWID का उपयोग करता है। उदाहरण के लिए, Oracle ROWID को अनुक्रमणिका में संग्रहीत करता है और तालिका में पंक्ति तक पहुँचने के लिए इसका उपयोग करता है।
आप निम्न प्रकार से SELECT कमांड का उपयोग करके पंक्तियों की ROWID प्रदर्शित कर सकते हैं:
पंक्ति का चयन करें, emp_name से emp;
ROWID EMP_NAME
AAADC576474722aSAAA जॉन
Oracle ROWID को डीकोड करने के लिए DBMS_ROWID नामक एक पैकेज प्रदान करता है।
एक बार एक पंक्ति असाइन किए जाने के बाद ROWID Oracle पंक्ति के जीवनकाल के दौरान ROWID को नहीं बदलता है। लेकिन यह तब बदल जाता है जब तालिका का पुनर्निर्माण किया जाता है जब विभाजन में पंक्तियों को स्थानांतरित किया जाता है, या तालिका का सिकुड़ना होता है
उदाहरण के साथ oracle में अनुक्रमणिका के प्रकार
ऑरैकल में 6 अलग-अलग प्रकार के इंडेक्स होते हैं
(1) बी-ट्री
(2) संपीडित बी-ट्री
(3) बिटमैप
(4) फंक्शन-आधारित
(5) रिवर्स की (आरकेआई)
(6) इंडेक्स ऑर्गनाइज्ड टेबल (आईओटी)।
आइए उनमें से प्रत्येक के बारे में विस्तार से जानें और इनमें से प्रत्येक प्रकार के लिए ऑरैकल में एक इंडेक्स कैसे बनाएं
B - ट्री इंडेक्स:
- बी-ट्री इंडेक्स (संतुलित पेड़) सबसे सामान्य प्रकार के इंडेक्स हैं।
- B-Tree अनुक्रमणिका ROWID और अनुक्रमणिका कुंजी मान को ट्री संरचना में संग्रहीत करती है।
- इंडेक्स बनाते समय, एक ROOT ब्लॉक बनाया जाता है, फिर ब्रांच ब्लॉक और अंत में LEAF ब्लॉक बनाए जाते हैं।
- प्रत्येक शाखा में डेटा की सीमा होती है जो उसके लीफ ब्लॉक में होती है, और प्रत्येक रूट में उसकी शाखाओं के डेटा की सीमा होती है:
- बी-ट्री इंडेक्स जहां क्लॉज में दिखाई देने वाले कॉलम पर सबसे उपयोगी होते हैं (चुनें ... जहां EMPNO=1)।
- Oracle सर्वर, टेबल में नया डेटा डालने पर इंडेक्स ब्लॉक को विभाजित करके ट्री को संतुलित रखता है।
- जब भी इंडेक्स की टेबल पर डीएमएल स्टेटमेंट किया जाता है, इंडेक्स गतिविधि होती है, जिससे इंडेक्स बढ़ता है (पत्ती और शाखाएं जोड़ें)।
फायदे
- पेड़ के सभी पत्ते एक ही गहराई पर हैं।
- बी-ट्री इंडेक्स अपने आप संतुलित रहते हैं।
- बी-पेड़ के सभी ब्लॉक औसतन तीन-चौथाई भरे हुए हैं।
- बी-पेड़ सटीक मिलान और श्रेणी खोजों सहित कई प्रकार की क्वेरी के लिए उत्कृष्ट पुनर्प्राप्ति प्रदर्शन प्रदान करते हैं।
- सम्मिलित करना, अपडेट करना और हटाना कुशल है, तेजी से पुनर्प्राप्ति के लिए महत्वपूर्ण क्रम बनाए रखना।
- बी-पेड़ का प्रदर्शन छोटी और बड़ी दोनों प्रकार की तालिकाओं के लिए अच्छा है, और तालिका के आकार के बढ़ने पर यह ख़राब नहीं होता है।
बनाएं <अद्वितीय|गैर अद्वितीय> INDEXचालू ( , …)TABLESPACE ;उदाहरण तालिका scott.example( name) पर अनुक्रमणिका बनाएं scott.exp_idx ; /पूर्व> संपीड़ित बी-ट्री इंडेक्स क्या है
- संपीड़ित बी-ट्री इंडेक्स डेटा वेयरहाउस वातावरण में बड़ी टेबल पर बनाए जाते हैं। इस प्रकार के सूचकांक में, समान मूल्य की डुप्लिकेट घटनाएँ समाप्त हो जाती हैं, इस प्रकार भंडारण स्थान की मात्रा को कम कर देता है, सूचकांक की आवश्यकता होती है।
- संपीड़ित बी-ट्री इंडेक्स में, प्रत्येक कुंजी मान के लिए, ROWIDs की एक सूची रखी जाती है
- इंडेक्स बनाते समय COMPRESS कीवर्ड को निर्दिष्ट करना (क्रिएट इंडेक्स ... COMPRESS) एक कंप्रेस्ड बी-ट्री इंडेक्स बनाएगा।
- एक नियमित बी-ट्री इंडेक्स को संपीड़ित करने के लिए COMPRESS कीवर्ड का उपयोग करके फिर से बनाया जा सकता है।
बनाएंबिटमैप अनुक्रमणिका क्या है
- बिटमैप इंडेक्स कम विशिष्ट कार्डिनैलिटी डेटा (बी-ट्री इंडेक्स के विपरीत) पर सबसे उपयुक्त हैं।
- इस प्रकार का इंडेक्स, सभी इंडेक्स वैल्यू का बाइनरी मैप बनाता है, और उस मैप को इंडेक्स ब्लॉक में स्टोर करता है, इसका मतलब है कि इंडेक्स को बी-ट्री इंडेक्स की तुलना में कम जगह की आवश्यकता होगी।
- बिटमैप में प्रत्येक बिट एक संभावित पंक्ति से मेल खाती है। यदि बिट सेट है, तो इसका मतलब है कि संबंधित पंक्ति वाली पंक्ति में कुंजी मान है। एक मैपिंग फ़ंक्शन बिट स्थिति को एक वास्तविक पंक्ति में परिवर्तित करता है, इसलिए बिटमैप इंडेक्स एक नियमित इंडेक्स के समान कार्यक्षमता प्रदान करता है, भले ही यह आंतरिक रूप से एक अलग प्रतिनिधित्व का उपयोग करता हो। यदि विभिन्न प्रमुख मानों की संख्या कम है, तो बिटमैप अनुक्रमणिका बहुत स्थान कुशल हैं
- जब टेबल पर बिटमैप इंडेक्स होते हैं तो अपडेट पूरे टेबल लॉक को हटा देगा। इसलिए, बिटमैप इंडेक्स कम-डीएमएल (कम-से-कम अपडेट) गतिविधि वाले बड़े कॉलम पर उपयोगी होता है या केवल टेबल पढ़ता है। यही कारण है कि आप अक्सर पाते हैं कि डेटा वेयरहाउस वातावरण (DWH) में बिटमैप इंडेक्स का व्यापक रूप से उपयोग किया जाता है।
- बिटमैप इंडेक्स संरचना में बिट्स का नक्शा होता है जो कॉलम में मान दर्शाता है, उदाहरण के लिए, जेंडर कॉलम के लिए, इंडेक्स ब्लॉक शुरुआती ROWID, अंतिम ROWID और बिट मैप को रखेगा:
- बिटमैप इंडेक्स कम कार्डिनैलिटी वाले कॉलम पर बनाए जाने पर बहुत उपयोगी होते हैं, जिनका उपयोग क्वेरी कंडीशन में AND &OR ऑपरेटर के साथ किया जाता है:
बिटमैप बनाएं INDEXON ( , …)PCTFREE TABLESPACE उदाहरण
emp_data(लिंग) पर बिटमैप इंडेक्स बनाएं; emp_data से COUNT(*) चुनें जहां जेंडर='एम';बिटमैप अनुक्रमणिका के लाभ
- प्रश्नों के बड़े वर्ग के लिए कम प्रतिक्रिया समय
- अन्य अनुक्रमण तकनीकों की तुलना में स्थान के उपयोग में पर्याप्त कमी
- बहुत कम हार्डवेयर पर भी नाटकीय प्रदर्शन लाभ
- बहुत ही कुशल समानांतर डीएमएल और लोड
कार्य आधारित अनुक्रमणिका
फ़ंक्शन-आधारित इंडेक्स कॉलम पर बनाए गए इंडेक्स होते हैं जिन पर फ़ंक्शन आमतौर पर लागू होता है।
अनुक्रमित कॉलम पर फ़ंक्शन का उपयोग करते समय, अनुक्रमणिका को अनदेखा कर दिया जाता है, इसलिए फ़ंक्शन-आधारित अनुक्रमणिका इन कार्यों के लिए बहुत उपयोगी होती है।
CREATE INDEXON [ Function( , ;ExampleCREATE INDEX EMP_IDX on EMP(UPPER(ENAME)); Select *FROM EmpWHERE UPPER(Ename) जैसे 'जॉन'; रिवर्स-की इंडेक्स क्या है
- वे विशेष प्रकार के बी-ट्री इंडेक्स हैं और कॉलम पर बनाए जाने पर बहुत उपयोगी होते हैं जिनमें अनुक्रमिक संख्याएं होती हैं।
- एक नियमित बी-ट्री का उपयोग करते समय, सूचकांक में कई शाखाएं और शायद कई स्तर होंगे, इस प्रकार प्रदर्शन में गिरावट का कारण बनता है, आरकेआई प्रत्येक कॉलम कुंजी के बाइट्स को उलट कर और नए डेटा को अनुक्रमित करके समस्या का समाधान करता है।
ली>- यह विधि इंडेक्स में डेटा को समान रूप से वितरित करती है। RKI बनाना REVERSE कीवर्ड का उपयोग करके किया जाता है:CREATE INDEX… ON… REVERSE;
इंडेक्स बनाएंON ( )TABLESPACE REVERSE;ExampleCREATE INDEX emp_idx i ON emp_table (प्रथम नाम,अंतिम नाम) रिवर्स; इंडेक्स ऑर्गनाइज्ड टेबल्स (IOT) क्या है -
- जब हम बी-ट्री का उपयोग कर रहे होते हैं, तो बिटमैप और रिवर्स कुंजी इंडेक्स का उपयोग उन तालिकाओं के लिए किया जाता है जो डेटा को बिना क्रम के (हीप टेबल्स) स्टोर करती हैं।
- इन अनुक्रमणिकाओं में आवश्यक तालिका पंक्ति के ROWID का स्थान होता है, इस प्रकार पंक्ति डेटा तक सीधी पहुंच की अनुमति मिलती है
- एक सूचकांक-संगठित तालिका एक सामान्य तालिका से भिन्न होता है क्योंकि तालिका के लिए डेटा उसके संबद्ध सूचकांक में रखा जाता है। तालिका डेटा में परिवर्तन, जैसे नई पंक्तियाँ जोड़ना, पंक्तियों को अद्यतन करना, या पंक्तियों को हटाना, अनुक्रमणिका को अद्यतन करने का परिणाम है।
- सूचकांक-संगठित तालिका एक सामान्य तालिका की तरह है जिसके एक या अधिक स्तंभों पर एक सूचकांक होता है, लेकिन तालिका और बी-ट्री इंडेक्स के लिए दो अलग-अलग भंडारण बनाए रखने के बजाय, डेटाबेस सिस्टम केवल एक ही बी- ट्री इंडेक्स जिसमें संबंधित पंक्ति के लिए एन्कोडेड कुंजी मान और संबंधित कॉलम मान दोनों शामिल हैं। अनुक्रमणिका प्रविष्टि के दूसरे तत्व के रूप में पंक्ति की पंक्ति होने के बजाय, वास्तविक डेटा पंक्ति को B-tree अनुक्रमणिका में संग्रहीत किया जाता है। डेटा पंक्तियों को तालिका के लिए प्राथमिक कुंजी पर बनाया गया है, और प्रत्येक बी-ट्री इंडेक्स प्रविष्टि में <प्राथमिक_की_वैल्यू, गैर_प्राथमिक_की_कॉलम_वैल्यू> शामिल हैं। इंडेक्स-संगठित टेबल प्राथमिक कुंजी या किसी भी कुंजी द्वारा डेटा तक पहुंचने के लिए उपयुक्त हैं जो प्राथमिक कुंजी का मान्य उपसर्ग है।
- कुंजी मानों का कोई दोहराव नहीं है क्योंकि कुंजी के साथ केवल गैर-कुंजी स्तंभ मान संग्रहीत किए जाते हैं। आप अन्य स्तंभों द्वारा कुशल पहुंच प्रदान करने के लिए द्वितीयक अनुक्रमणिका बना सकते हैं। अनुप्रयोग SQL कथनों का उपयोग करते हुए, एक सामान्य तालिका की तरह अनुक्रमणिका-संगठित तालिका में हेरफेर करते हैं। हालांकि, डेटाबेस सिस्टम संबंधित बी-ट्री इंडेक्स में हेरफेर करके सभी ऑपरेशन करता है।
सूचकांक व्यवस्थित तालिका की विशेषताएं
- प्राथमिक कुंजी विशिष्ट रूप से एक पंक्ति की पहचान करती है; प्राथमिक कुंजी निर्दिष्ट होनी चाहिए
- प्राथमिक कुंजी आधारित पहुंच
- ROWID छद्म स्तंभ में तार्किक पंक्तिबद्ध द्वितीयक अनुक्रमणिका बनाने की अनुमति देता है
- अद्वितीय बाधा की अनुमति नहीं है लेकिन ट्रिगर की अनुमति है
- क्लस्टर में स्टोर नहीं किया जा सकता
- एलओबी कॉलम हो सकते हैं लेकिन लंबे कॉलम नहीं हो सकते हैं
- वितरण और प्रतिकृति समर्थित नहीं हैं
टेबल कमांड बनाएं:टेबल बनाएं ...संगठन इंडेक्स टेबलस्पेस ... (निर्दिष्ट करें कि यह एक आईओटी है)पीसीटीथ्रेशोल्ड ... (पंक्ति डेटा को स्टोर करने के लिए ब्लॉक का% निर्दिष्ट करें, मान्य 0-50 (डिफ़ॉल्ट 50)) सहित ... (निर्दिष्ट करें जब पंक्ति की लंबाई PCTTHRESHOLD से अधिक हो जाती है तो कौन सा कॉलम पंक्ति को तोड़ना है) ओवरफ्लो टेबलस्पेस ... (तालिका स्थान निर्दिष्ट करें जहां पंक्ति का दूसरा भाग संग्रहीत किया जाएगा) मैपिंग टेबल; (आईओटी पर बिटमैप इंडेक्स बनाते समय आवश्यक मैपिंग टेबल बनाने का कारण)मैपिंग टेबल इंडेक्स के भौतिक ROWIDs को IOT में तार्किक ROWIDs पर मैप करता है। IOT इंडेक्स द्वारा टेबल एक्सेस को मैनेज करने के लिए लॉजिकल ROWIDs का उपयोग करता है क्योंकि जब भी डेटा को टेबल से जोड़ा या हटाया जाता है तो फिजिकल ROWID को बदल दिया जाता है। IOT को अन्य इंडेक्स से अलग करने के लिए, pct_direct_access कॉलम का उपयोग करके USER_INDEXES व्यू को क्वेरी करें। इस कॉलम के लिए केवल IOT का एक गैर-शून्य मान होगा।
एप्लिकेशन डोमेन अनुक्रमणिका
Oracle एक्सटेंसिबल इंडेक्सिंग . प्रदान करता है दस्तावेजों, स्थानिक डेटा, छवियों और वीडियो क्लिप जैसे जटिल डेटा प्रकारों पर अनुक्रमणिका को समायोजित करने और विशेष अनुक्रमण तकनीकों का उपयोग करने के लिए।
एक्स्टेंसिबल इंडेक्सिंग के साथ, आप एप्लिकेशन-विशिष्ट इंडेक्स मैनेजमेंट रूटीन को इंडेक्स टाइप के रूप में समाहित कर सकते हैं स्कीमा ऑब्जेक्ट और डोमेन अनुक्रमणिका . को परिभाषित करें (एक एप्लिकेशन-विशिष्ट अनुक्रमणिका) किसी ऑब्जेक्ट प्रकार के टेबल कॉलम या विशेषताओं पर। एक्स्टेंसिबल इंडेक्सिंग एप्लिकेशन-विशिष्ट ऑपरेटर . की कुशल प्रसंस्करण भी प्रदान करता है एस.
एप्लिकेशन सॉफ़्टवेयर, जिसे cartridg . कहा जाता है e, डोमेन इंडेक्स की संरचना और सामग्री को नियंत्रित करता है। Oracle सर्वर डोमेन इंडेक्स बनाने, बनाए रखने और खोजने के लिए एप्लिकेशन के साथ इंटरैक्ट करता है। अनुक्रमणिका संरचना को Oracle डेटाबेस में अनुक्रमणिका-संगठित तालिका के रूप में या बाह्य रूप से फ़ाइल के रूप में संग्रहीत किया जा सकता है।
डोमेन अनुक्रमणिका का उपयोग करना
डोमेन इंडेक्स उपयोगकर्ता द्वारा परिभाषित इंडेक्स प्रकार द्वारा प्रदान किए गए इंडेक्सिंग लॉजिक का उपयोग करके बनाए जाते हैं। एक सूचकांक प्रकार डेटा तक पहुँचने के लिए एक कुशल तंत्र प्रदान करता है जो कुछ ऑपरेटर विधेय को संतुष्ट करता है। आमतौर पर, उपयोगकर्ता-परिभाषित अनुक्रमणिका प्रकार एक Oracle विकल्प का हिस्सा होता है, जैसे स्थानिक विकल्प।
उदाहरण के लिए, SpatialIndextype किसी दिए गए बाउंडिंग बॉक्स को ओवरलैप करने वाले स्थानिक डेटा की कुशल खोज और पुनर्प्राप्ति की अनुमति देता है।
कार्ट्रिज उन मापदंडों को निर्धारित करता है जिन्हें आप डोमेन इंडेक्स बनाने और बनाए रखने में निर्दिष्ट कर सकते हैं। इसी तरह, डोमेन इंडेक्स के प्रदर्शन और भंडारण विशेषताओं को विशिष्ट कार्ट्रिज दस्तावेज़ीकरण में प्रस्तुत किया जाता है।
अब तक हमने ऑरैकल में विभिन्न प्रकार के इंडेक्स को एक उदाहरण के साथ कवर किया है, आइए अब जांचते हैं कि उन्हें कैसे बदला/छोड़ा/फिर से बनाया जाए
ऑरैकल में इंडेक्स को फिर से कैसे बनाएं/इंडेक्स को फिर से बनाएं
हम ALTER INDEX… REBUILD स्टेटमेंट का इस्तेमाल किसी मौजूदा इंडेक्स को फिर से संगठित या कॉम्पैक्ट करने या उसकी स्टोरेज विशेषताओं को बदलने के लिए कर सकते हैं
REBUILD स्टेटमेंट नए इंडेक्स के आधार के रूप में मौजूदा इंडेक्स का उपयोग करता है।
ALTER INDEX … REBUILD आमतौर पर किसी इंडेक्स को छोड़ने और फिर से बनाने की तुलना में तेज़ होता है।
यह मल्टी-ब्लॉक I/O का उपयोग करके सभी इंडेक्स ब्लॉक को पढ़ता है और फिर ब्रांच ब्लॉक को छोड़ देता है।
इस दृष्टिकोण का एक और लाभ यह है कि पुरानी अनुक्रमणिका अभी भी प्रश्नों के लिए उपलब्ध है जबकि पुनर्निर्माण प्रगति पर है।
अनुक्रमणिका बदलें <अनुक्रमणिका नाम> पुनर्निर्माण;अनुक्रमणिका बदलें <अनुक्रमणिका नाम> पुनर्निर्माण तालिका स्थान <नाम>;सूचकांक का उपयोग करने से बचने वाले कथन कैसे लिखें
- आप एक निश्चित इंडेक्स के उपयोग की अनुमति न देते हुए सीबीओ को अधिकतम लचीलापन देने के लिए NO_INDEX ऑप्टिमाइज़र संकेत का उपयोग कर सकते हैं।
- आप ऑप्टिमाइज़र को इंडेक्स स्कैन के बजाय एक पूर्ण टेबल स्कैन चुनने के लिए बाध्य करने के लिए पूर्ण संकेत का उपयोग कर सकते हैं।
- आप INDEX, INDEX_COMBINE, या AND_EQUAL संकेतों का उपयोग करके अनुकूलक को एक इंडेक्स या दूसरे के बजाय सूचीबद्ध इंडेक्स के सेट का उपयोग करने के लिए बाध्य कर सकते हैं।
इंडेक्स के लिए आंकड़े कैसे एकत्रित करें
इंडेक्स के आंकड़े ANALYZE INDEX या dbms_stats स्टेटमेंट का इस्तेमाल करके इकट्ठा किए जाते हैं।
उपलब्ध विकल्प कंप्यूट/अनुमान सांख्यिकी या मान्य संरचना हैं।
10g के बाद से, जब इंडेक्स बनाया जाता है, तो आँकड़ों की गणना अपने आप हो जाती है
मान्य संरचना का उपयोग करते समय, Oracle विश्लेषण किए गए सूचकांक से संबंधित आंकड़ों के साथ INDEX_STATS दृश्य को पॉप्युलेट करता है। आँकड़ों में पत्ती पंक्तियों और ब्लॉकों की संख्या (LF_ROWS, LF_BLKS), शाखा पंक्तियों और ब्लॉकों की संख्या (BR_ROWS, BR_BLKS), हटाई गई पत्ती पंक्तियों की संख्या (DEL_LF_ROWS), प्रयुक्त स्थान (USED_SPACE), विशिष्ट कुंजियों की संख्या (DISTINCT_KEYS) शामिल हैं। , आदि। इन आंकड़ों का उपयोग यह निर्धारित करने के लिए किया जा सकता है कि सूचकांक का पुनर्निर्माण किया जाना चाहिए या नहीं
इंडेक्स के उपयोग के बारे में Oracle कैसे निर्णय लेता है?
Oracle स्वचालित रूप से तय करता है कि इंडेक्स को ऑप्टिमाइज़र इंजन द्वारा उपयोग किया जाना चाहिए या नहीं।
Oracle यह तय करता है कि क्वेरी के आधार पर इंडेक्स का उपयोग करना है या नहीं।
Oracle समझ सकता है कि क्या किसी इंडेक्स का उपयोग करने से दी गई क्वेरी में प्रदर्शन में सुधार होगा। अगर Oracle को लगता है कि इंडेक्स का उपयोग करने से प्रदर्शन में सुधार होगा, तो वह इंडेक्स का उपयोग करेगा अन्यथा यह इंडेक्स को अनदेखा कर देगा।
आइए इस उदाहरण से समझते हैं
हमारे पास एक टेबल एम्प है जिसमें emp_name, वेतन, विभाग_नो, emp_no, date_of_joining शामिल है और हमारे पास emp_name पर एक अनुक्रमणिका है
प्रश्न 1
एम्प से * चुनें जहां emp_name ='जॉन';उपरोक्त क्वेरी इंडेक्स का उपयोग करेगी क्योंकि हम नाम के आधार पर एक एम्प के बारे में जानकारी प्राप्त करने का प्रयास कर रहे हैं।
प्रश्न 2
एम्प से *चुनें;उपरोक्त क्वेरी इंडेक्स का उपयोग नहीं करेगी क्योंकि हम तालिका में सभी पंक्तियों को खोजने का प्रयास कर रहे हैं और हमारे पास क्वेरी में क्लॉज कहां नहीं है
प्रश्न 3
एम्प से चुनें * जहां dept_no =5;उपरोक्त क्वेरी इंडेक्स का उपयोग नहीं करेगी क्योंकि जहां क्लॉज उस कॉलम का चयन नहीं करता है जिसमें एक इंडेक्स है
प्रश्न 4
एम्प से * चुनें जहां सबस्ट्र (emp_name,1,4) ='XYZW';उपरोक्त क्वेरी इंडेक्स का उपयोग नहीं करेगी क्योंकि क्लॉज कॉलम पर फ़ंक्शन का उपयोग करता है और हमारे पास emp_name पर एक कार्यात्मक अनुक्रमणिका नहीं है
सूचकांक ऑनलाइन कैसे बनाएं या पुनर्निर्माण कैसे करें?
Oracle उस तालिका को लॉक करता था जिस पर पुराने संस्करणों में निर्माण प्रक्रिया के दौरान अनुक्रमणिका बनाई जा रही है। यह तालिका को इंडेक्स के निर्माण के दौरान डेटा हेरफेर के लिए अनुपलब्ध बनाता है।
अब 8i के साथ, Oracle ने इंडेक्स के ऑनलाइन पुनर्निर्माण की शुरुआत की, जहां Oracle उस तालिका को लॉक नहीं करता है जिस पर इंडेक्स बनाया जा रहा है।
ऑनलाइन अनुक्रमण कीवर्ड ONLINE के माध्यम से प्रदान किया जाता है।
बनाएं>मूल रूप से, एक ऑनलाइन पुनर्निर्माण के साथ, Oracle सूचकांक के निर्माण के प्रारंभ और अंत में तालिका को लॉक कर देता है। यह बीच में लेनदेन की अनुमति देता है। तंत्र 11g और 12c के साथ काफी सुधार किया गया है
इंडेक्स की कमियां क्या हैं
इंडेक्स एक चुनिंदा क्वेरी के प्रदर्शन को बढ़ाते हैं, वे डेटा हेरफेर के प्रदर्शन को भी कम कर सकते हैं।
एक टेबल पर मौजूद कई इंडेक्स INSERTS और DELETES को काफी धीमा कर सकते हैं
टेबल पर जितने अधिक इंडेक्स होंगे, इंसर्ट और डिलीट में उतना ही अधिक समय लगेगा।
इसी तरह, इंडेक्स किए गए कॉलम में हर बदलाव के लिए इंडेक्स में बदलाव की ज़रूरत होगी।
इसलिए हमें इंडेक्स को बहुत सावधानी से चुनना होगा और जो उपयोग में नहीं हैं उसे छोड़ देना चाहिए।
हालांकि इंडेक्स द्वारा कब्जा कर लिया गया अतिरिक्त स्थान भी एक विचार है, यह ज्यादा मायने नहीं रखता क्योंकि डेटा भंडारण की लागत में काफी गिरावट आई है।
अनुपयोगी अनुक्रमणिका क्या है
व्याख्या योजना तय करने में अनुकूलक द्वारा अनुपयोगी अनुक्रमणिका को अनदेखा कर दिया जाता है
यह डीएमएल द्वारा भी बनाए नहीं रखा जाता है यानी अपडेट, इंसर्ट, डिलीट इंडेक्स को अपडेट करता है
सूचकांक के अनुपयोगी स्थिति में होने के कई कारण हो सकते हैं। आपने तालिका का पुनर्निर्माण किया लेकिन सूचकांक का पुनर्निर्माण नहीं किया, तो सूचकांक अनुपयोगी स्थिति में होगा। सूचकांक को अनुपयोगी बनाने का एक अन्य कारण बल्क लोड प्रदर्शन में सुधार करना है। एक और कारण हो सकता है कि ऑप्टिमाइज़र हर बार गलत इंडेक्स को उठा रहा हो और समय महत्वपूर्ण हो, इसलिए आप इसे अनुपयोगी बनाने का फैसला कर सकते हैं
एक अनुपयोगी इंडेक्स या इंडेक्स विभाजन को फिर से बनाया जाना चाहिए, या इसे इस्तेमाल करने से पहले गिरा दिया और फिर से बनाया जाना चाहिए। तालिका को छोटा करने से अनुपयोगी अनुक्रमणिका मान्य हो जाती है।
Oracle डेटाबेस 11g रिलीज़ 2 से शुरू होकर, जब आप किसी मौजूदा अनुक्रमणिका को अनुपयोगी बनाते हैं, तो उसका अनुक्रमणिका खंड गिरा दिया जाता है।
अनुपयोगी अनुक्रमणिका की कार्यक्षमता SKIP_UNUSABLE_INDEXES आरंभीकरण पैरामीटर की सेटिंग पर निर्भर करती है।
जब SKIP_UNUSABLE_INDEXES TRUE (डिफ़ॉल्ट) हो, तब:
तालिका के विरुद्ध DML विवरण आगे बढ़ते हैं, लेकिन अनुपयोगी अनुक्रमणिका को बनाए नहीं रखा जाता है।
यदि कोई अनुपयोगी अनुक्रमणिका है जो UNIQUE बाधा को लागू करने के लिए उपयोग की जाती है, तो DML स्टेटमेंट एक त्रुटि के साथ समाप्त हो जाते हैं।
गैर-विभाजित इंडेक्स के लिए, ऑप्टिमाइज़र किसी भी अनुपयोगी इंडेक्स पर विचार नहीं करता है जब SELECT स्टेटमेंट के लिए एक्सेस प्लान बनाते हैं। एकमात्र अपवाद तब होता है जब एक इंडेक्स को INDEX() संकेत के साथ स्पष्ट रूप से निर्दिष्ट किया जाता है।
जब SKIP_UNUSABLE_INDEXES FALSE हो, तब:
यदि कोई अनुपयोगी अनुक्रमणिका या अनुक्रमणिका विभाजन मौजूद हैं, तो कोई भी DML विवरण जो उन अनुक्रमणिका या अनुक्रमणिका विभाजन को अद्यतन करने का कारण बनता है, एक त्रुटि के साथ समाप्त हो जाता है।
सेलेक्ट स्टेटमेंट के लिए, यदि एक अनुपयोगी इंडेक्स या अनुपयोगी इंडेक्स पार्टीशन मौजूद है, लेकिन ऑप्टिमाइज़र एक्सेस प्लान के लिए इसका इस्तेमाल नहीं करता है, तो स्टेटमेंट आगे बढ़ता है। हालाँकि, यदि अनुकूलक अनुपयोगी अनुक्रमणिका या अनुपयोगी अनुक्रमणिका विभाजन का उपयोग करना चुनता है, तो कथन एक त्रुटि के साथ समाप्त हो जाता है।
सूचकांक पर डेटा शब्दकोश दृश्य
DBA_INDEXES ALL_INDEXES USER_INDEXES DBA व्यू डेटाबेस में सभी टेबल पर इंडेक्स का वर्णन करता है। सभी दृश्य उपयोगकर्ता के लिए सुलभ सभी तालिकाओं पर अनुक्रमणिका का वर्णन करते हैं। USER दृश्य उपयोगकर्ता के स्वामित्व वाली अनुक्रमणिका तक सीमित है। इन दृश्यों के कुछ स्तंभों में ऐसे आँकड़े होते हैं जो DBMS_STATS पैकेज या ANALYZE कथन द्वारा उत्पन्न होते हैं। DBA_IND_COLUMNS ALL_IND_COLUMNS USER_IND_COLUMNS
ये दृश्य तालिकाओं पर अनुक्रमणिका के स्तंभों का वर्णन करते हैं। इन दृश्यों के कुछ स्तंभों में ऐसे आँकड़े होते हैं जो DBMS_STATS पैकेज या ANALYZE कथन द्वारा उत्पन्न होते हैं। DBA_IND_EXPRESSIONS ALL_IND_EXPRESSIONS USER_IND_EXPRESSIONS
ये दृश्य तालिकाओं पर फ़ंक्शन-आधारित अनुक्रमणिका के भावों का वर्णन करते हैं। DBA_IND_STATISTICS ALL_IND_STATISTICS USER_IND_STATISTICS
इन दृश्यों में अनुक्रमणिका के लिए अनुकूलक आँकड़े होते हैं। टेबल पर इंडेक्स कैसे खोजें
सेट पेजसाइज 50000 वेरिफाई ऑफ इको ऑफकॉल टेबल_नाम हेड 'टेबल नेम' फॉर्मेट a20col इंडेक्स_नाम हेड 'इंडेक्स नेम' फॉर्मेट a25col कॉलम_नाम हेड 'कॉलम नेम' फॉर्मेट ए30 इंडेक्स_नाम पर टेबल_नाम पर ब्रेक चुनें टेबल_नाम, इंडेक्स_नाम, कॉलम_नाम सभी_इंड_कॉलम से जहां टेबल_नाम जैसे ऊपरी ('&टेबल_नाम) ') table_name, index_name, column_position/. द्वारा ऑर्डर करेंसूचकांक का आकार कैसे निर्धारित करें
INDEX का आकार उपयोगकर्ता_सेगमेंट से सेगमेंट_नाम, योग (बाइट्स)/1024/1024/1024 को "जीबी में SIZE" के रूप में चुनें, जहां सेगमेंट_नाम ='INDEX_NAME' समूह सेगमेंट_नाम द्वारा; या स्वामी, सेगमेंट_नाम, योग (बाइट्स)/1024/1024/1024 को "SIZE इन" के रूप में चुनें GB" dba_segments से जहाँ स्वामी ='SCHEMA_NAME' और खंड_नाम =स्वामी द्वारा 'INDEX_NAME' समूह, खण्ड_नाम; उपयोगकर्ता के सभी INDEXES के आकार की सूची उपयोगकर्ता_सेगमेंट से सेगमेंट_नाम, योग (बाइट्स)/1024/1024/1024 को "जीबी में आकार" के रूप में चुनें, जहां सेगमेंट_टाइप ='इंडेक्स' समूह सेगमेंट_नाम ऑर्डर द्वारा "जीबी में आकार" विवरण द्वारा; या मालिक का चयन करें, सेगमेंट_नाम, योग (बाइट्स)/1024 /1024/1024 dba_segments से "GB में SIZE" के रूप में जहां स्वामी ='SCHEMA_NAME' और खंड_प्रकार ='INDEX' समूह स्वामी द्वारा, segment_name आदेश "GB में SIZE" विवरण द्वारा;सभी अनुक्रमणिका के आकार का योग dba_segments से स्वामी, योग (बाइट्स)/1024/1024/1024 को "GB में SIZE" के रूप में चुनें, जहां स्वामी ='SCHEMA_NAME' और खंड_प्रकार =स्वामी द्वारा 'INDEX' समूह;सूचकांक कैसे निर्धारित करें परिभाषा
ड्यूल सेलंबा 4000चयन dbms_metadata.get_ddl('INDEX','',' सूचकांक के आंकड़े कैसे निर्धारित करें
सेट पेज 250सेट लाइनसाइज 100सेट वेरिफाई ऑफकॉल टेबल_नाम फॉर्मेट ए24 हेडिंग 'टेबल नेम'कॉल इंडेक्स_नाम फॉर्मेट ए23 हेडिंग 'इंडेक्स नेम'कॉल यू फॉर्मेट ए1 हेडिंग 'यू'कॉल ब्लेबल फॉर्मेट 0 हेडिंग 'बीएल'कॉल लीफ_ब्लॉक्स फॉर्मेट 999990 हेडिंग 'एलईएफ' |BLOCKS'col विशिष्ट_की प्रारूप 9999990 शीर्षक 'DISTINCT|KEYS'col avg_leaf_blocks_per_key प्रारूप 9999990 शीर्षक 'LEAF|BLKS|/KEY'col avg_data_blocks_per_key प्रारूप 9999990 शीर्षक 'डेटा|बीएलकेएस//की' तालिका_नाम का चयन करें तालिका_नाम, अनुक्रमणिका_नाम का चयन करें, अनुक्रमणिका_नाम, 'UNIQUE', 'U', null ) u,blevel, लीफ_ब्लॉक्स, डिफरेंट_की, avg_leaf_blocks_per_key, avg_data_blocks_per_keyसे sys.dba_indexesजहां table_owner जैसे अपर ('&owner') और table_name जैसे अपर ('&owner')name, index_name, table_owner, table_name; /पूर्व>संबंधित लेख
ओरेकल में बाहरी टेबल:ओरेकल में बाहरी टेबल के उपयोग के बारे में जानकारी के लिए इस पोस्ट को एक उदाहरण के साथ देखें, बाहरी टेबल कैसे बनाएं, इसका उपयोग कैसे करें
ओरेकल टेबल बनाएं:टेबल्स डेटा की मूल इकाई हैं Oracle डेटाबेस में भंडारण। हम कवर करते हैं कि विदेशी कुंजी / प्राथमिक कुंजी के साथ तालिका बनाने के लिए ओरेकल टेबल कमांड का उपयोग कैसे करें
ओरेकल टेबलस्पेस स्टेटमेंट बनाएं:ओरेकल में टेबलस्पेस कैसे बनाएं, इससे जुड़ी विभिन्न विशेषताएं और अलग-अलग टेबलस्पेस स्टेटमेंट बनाएं
तालिका के लिए अनुक्रमणिका स्थिति और असाइन किए गए स्तंभ खोजें
Oracle में वर्चुअल अनुक्रमणिका:Oracle में वर्चुअल अनुक्रमणिका क्या है? Oracle डेटाबेस में योजना की व्याख्या करने के लिए उपयोग, सीमा, लाभ और उपयोग कैसे करें, हिडन पैरामीटर _USE_NOSEGMENT_INDEXES
Oracle इंडेक्स क्लस्टरिंग फ़ैक्टर:Oracle इंडेक्स क्लस्टरिंग फ़ैक्टर की गणना कैसे की जाती है और यह व्याख्या योजना को कैसे प्रभावित करता है
Oracle विभाजन इंडेक्स:ओरेकल पार्टीशन इंडेक्स को समझना, ग्लोबल नॉन-पार्टिशन इंडेक्स क्या है?, लोकल प्रीफिक्स्ड इंडेक्स, नॉन-प्रीफिक्स्ड लोकल इंडेक्स क्या हैअनुशंसित पाठ्यक्रम
यहाँ Oracle SQL के लिए अच्छा Udemy कोर्स है
Oracle-Sql-Step-by-step :इस कोर्स में बेसिक sql, जॉइन, टेबल बनाना और इसकी संरचना को संशोधित करना, व्यू, यूनियन, यूनियन -ऑल और बहुत कुछ शामिल है। . SQL स्टार्टर के लिए एक बढ़िया कोर्स और अनिवार्य कोर्स
पूर्ण Oracle SQL प्रमाणन पाठ्यक्रम :यह उन लोगों के लिए एक अच्छा कोर्स है जो SQL डेवलपर कौशल के लिए नौकरी के लिए तैयार होना चाहते हैं। एक अच्छा समझाया गया कोर्स
Oracle SQL Developer:Essentials, Tips and Tricks :कई डेवलपर्स द्वारा Oracle Sql डेवलपर टूल का उपयोग किया जा रहा है। यह कोर्स हमें प्रभावी ढंग से इसका उपयोग करने और एक उत्पादक sql डेवलपर बनने के तरीके के बारे में ट्रिक्स और सबक देता है
Oracle SQL प्रदर्शन ट्यूनिंग मास्टरक्लास 2020 :प्रदर्शन ट्यूनिंग एक महत्वपूर्ण और सर्वाधिक मांग वाला कौशल है। इसके बारे में जानने और sql प्रदर्शन ट्यूनिंग शुरू करने के लिए यह एक अच्छा कोर्स है