डाटाबेस इंडेक्स

डेटाबेस इंडेक्स एक डेटा संरचना है जो इंडेक्स डेटा संरचना को बनाए रखने के लिए अतिरिक्त राइट्स और स्टोरेज स्पेस की कीमत पर तालिका (डेटाबेस) पर डेटा पुनर्प्राप्ति संचालन की गति में सुधार करता है। इंडेक्स का उपयोग डेटाबेस तालिका में प्रत्येक पंक्ति को खोजे बिना हर बार डेटाबेस तालिका तक पहुँचने के लिए डेटा को जल्दी से खोजने के लिए किया जाता है। इंडेक्स एक या अधिक कॉलम (डेटाबेस) का उपयोग करके बनाया जा सकता है, जो तेजी से रैंडम ऊपर देखो और आदेशित रिकॉर्ड की कुशल पहुंच दोनों के लिए आधार प्रदान करता है।

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

तेजी से देखने के लिए समर्थन
अधिकांश डेटाबेस सॉफ़्टवेयर में इंडेक्सिंग तकनीक शामिल होती है जो प्रदर्शन को बेहतर बनाने के लिए उप-[[रैखिक समय]] लुकअप को सक्षम करती है, क्योंकि बड़े डेटाबेस के लिए रैखिक खोज अक्षम होती है।

मान लीजिए कि एक डेटाबेस में N डेटा आइटम हैं और किसी एक फ़ील्ड के मान के आधार पर इसे पुनर्प्राप्त किया जाना चाहिए। एक सरल कार्यान्वयन परीक्षण के अनुसार प्रत्येक आइटम को पुनः प्राप्त करता है और उसकी जांच करता है। यदि केवल एक मेल खाने वाला आइटम है, तो यह उस एकल आइटम को मिलने पर रुक सकता है, लेकिन यदि कई मैच हैं, तो उसे हर चीज का परीक्षण करना चाहिए। इसका मतलब है कि औसत मामले में संचालन की संख्या बिग ओ नोटेशन (एन) या रैखिक समय है। चूंकि डेटाबेस में कई ऑब्जेक्ट हो सकते हैं, और चूंकि लुकअप एक सामान्य ऑपरेशन है, इसलिए प्रदर्शन में सुधार करना अक्सर वांछनीय होता है।

इंडेक्स कोई भी डेटा संरचना है जो लुकअप के प्रदर्शन को बेहतर बनाता है। इस उद्देश्य के लिए उपयोग की जाने वाली कई अलग-अलग :श्रेणी:डेटा संरचनाएं हैं। लुकअप प्रदर्शन, इंडेक्स आकार और इंडेक्स-अपडेट प्रदर्शन से जुड़े जटिल डिज़ाइन ट्रेड-ऑफ़ हैं। कई इंडेक्स डिज़ाइन लॉगरिदमिक (बिग ओ नोटेशन (लॉग (एन))) लुकअप प्रदर्शन प्रदर्शित करते हैं और कुछ अनुप्रयोगों में फ्लैट (बिग ओ नोटेशन (1)) प्रदर्शन प्राप्त करना संभव है।

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

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

गैर-क्लस्टर
डेटा मनमाना क्रम में मौजूद है, लेकिन तार्किक क्रम सूचकांक द्वारा निर्दिष्ट किया गया है। अनुक्रमित स्तंभ या अभिव्यक्ति के मान की परवाह किए बिना डेटा पंक्तियाँ पूरे तालिका में फैली हो सकती हैं। गैर-क्लस्टर्ड इंडेक्स ट्री में अनुक्रमित क्रम में इंडेक्स कुंजियाँ होती हैं, जिसमें इंडेक्स के लीफ लेवल में रिकॉर्ड के लिए पॉइंटर होता है (पृष्ठ-संगठित इंजनों में डेटा पेज में पेज और पंक्ति संख्या; फ़ाइल-संगठित इंजनों में पंक्ति ऑफ़सेट) ).

एक गैर-संकुलित सूचकांक में,


 * पंक्तियों का भौतिक क्रम अनुक्रमणिका क्रम के समान नहीं है।
 * अनुक्रमित कॉलम आमतौर पर गैर-प्राथमिक कुंजी कॉलम होते हैं जिनका उपयोग जॉइन, व्हेयर और ऑर्डर बाय क्लॉज में किया जाता है।

एक डेटाबेस टेबल पर एक से अधिक गैर-क्लस्टर इंडेक्स हो सकते हैं।

क्लस्टर्ड
क्लस्टरिंग इंडेक्स से मिलान करने के लिए डेटा ब्लॉक को एक निश्चित विशिष्ट क्रम में बदल देता है, जिसके परिणामस्वरूप पंक्ति डेटा को क्रम में संग्रहीत किया जाता है। इसलिए, किसी दिए गए डेटाबेस टेबल पर केवल एक क्लस्टर्ड इंडेक्स बनाया जा सकता है। क्लस्टर किए गए इंडेक्स पुनर्प्राप्ति की समग्र गति को बहुत बढ़ा सकते हैं, लेकिन आमतौर पर केवल वहीं जहां डेटा को अनुक्रमिक रूप से क्लस्टर किए गए इंडेक्स के समान या रिवर्स ऑर्डर में एक्सेस किया जाता है, या जब आइटम की एक श्रेणी का चयन किया जाता है।

चूंकि भौतिक रिकॉर्ड डिस्क पर इस तरह के क्रम में हैं, अनुक्रम में अगली पंक्ति आइटम पिछले एक के ठीक पहले या बाद में है, और इसलिए कम डेटा ब्लॉक रीड की आवश्यकता होती है। क्लस्टर्ड इंडेक्स की प्राथमिक विशेषता इसलिए इंडेक्स ब्लॉक के अनुसार भौतिक डेटा पंक्तियों का क्रम है जो उन्हें इंगित करता है। कुछ डेटाबेस डेटा और इंडेक्स ब्लॉक को अलग-अलग फाइलों में अलग करते हैं, अन्य दो पूरी तरह से अलग डेटा ब्लॉक को एक ही भौतिक फ़ाइल में डालते हैं।

क्लस्टर
जब कई डेटाबेस और कई टेबल जुड़ जाते हैं, तो इसे क्लस्टर कहा जाता है (पहले वर्णित क्लस्टर्ड इंडेक्स के साथ भ्रमित नहीं होना चाहिए)। क्लस्टर कुंजी के मान को साझा करने वाली तालिकाओं के रिकॉर्ड समान या आस-पास के डेटा ब्लॉक में एक साथ संग्रहीत किए जाएंगे। यह क्लस्टर कुंजी पर इन तालिकाओं के जुड़ाव में सुधार कर सकता है, क्योंकि मिलान रिकॉर्ड एक साथ संग्रहीत किए जाते हैं और उन्हें खोजने के लिए कम I/O की आवश्यकता होती है। क्लस्टर कॉन्फ़िगरेशन परिभाषित करता है तालिका में डेटा लेआउट जो क्लस्टर के हिस्से हैं। एक क्लस्टर को बी-ट्री इंडेक्स या हैश तालिका के साथ जोड़ा जा सकता है। डेटा ब्लॉक जहां तालिका रिकॉर्ड संग्रहीत किया जाता है, क्लस्टर कुंजी के मान द्वारा परिभाषित किया जाता है।

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

उदाहरण के लिए, पहले शहर द्वारा आयोजित फोन बुक में, फिर अंतिम नाम से, और फिर पहले नाम से, किसी विशेष शहर में, सभी फोन नंबरों की सूची आसानी से निकाली जा सकती है। हालाँकि, किसी विशेष अंतिम नाम के लिए सभी फ़ोन नंबरों को खोजना बहुत कठिन होगा। उस अंतिम नाम वाली प्रविष्टियों के लिए प्रत्येक शहर के अनुभाग में देखना होगा। कुछ डेटाबेस ऐसा कर सकते हैं, अन्य सिर्फ इंडेक्स का उपयोग नहीं करेंगे।

फ़ोन बुक उदाहरण में स्तंभों पर बनाए गए समग्र अनुक्रमणिका (डेटाबेस) के साथ, यदि हम तीनों क्षेत्रों के लिए सटीक मान देकर खोज करते हैं, तो खोज का समय न्यूनतम होता है—लेकिन यदि हम इसके लिए मान प्रदान करते हैं  और    केवल, खोज केवल का उपयोग करती है   फ़ील्ड सभी मिलान किए गए रिकॉर्ड पुनर्प्राप्त करने के लिए। फिर एक अनुक्रमिक लुकअप के साथ मिलान की जाँच करता है. इसलिए, प्रदर्शन को बेहतर बनाने के लिए, यह सुनिश्चित करना चाहिए कि खोज कॉलम के क्रम में इंडेक्स बनाया गया है।

अनुप्रयोग और सीमाएं
इंडेक्स कई अनुप्रयोगों के लिए उपयोगी होते हैं लेकिन कुछ सीमाओं के साथ आते हैं। निम्नलिखित SQL कथन पर विचार करें: sql. इस कथन को अनुक्रमणिका के बिना संसाधित करने के लिए डेटाबेस सॉफ़्टवेयर को तालिका में प्रत्येक पंक्ति पर last_name कॉलम देखना चाहिए (इसे पूर्ण तालिका स्कैन के रूप में जाना जाता है)। इंडेक्स के साथ डेटाबेस केवल इंडेक्स डेटा स्ट्रक्चर (आमतौर पर बी-वृक्ष) का अनुसरण करता है जब तक कि स्मिथ प्रविष्टि नहीं मिल जाती; यह कम्प्यूटेशनल रूप से पूर्ण टेबल स्कैन की तुलना में बहुत कम महंगा है।

इस SQL ​​कथन पर विचार करें: SELECT email_address FROM customers WHERE email_address LIKE '%@wikipedia.org';. यह क्वेरी प्रत्येक ग्राहक के लिए एक ईमेल पता देगी जिसका ईमेल पता @wikipedia.org के साथ समाप्त होता है, लेकिन भले ही ईमेल_एड्रेस कॉलम को अनुक्रमित किया गया हो, डेटाबेस को एक पूर्ण इंडेक्स स्कैन करना होगा। ऐसा इसलिए है क्योंकि इंडेक्स इस धारणा के साथ बनाया गया है कि शब्द बाएं से दाएं जाते हैं। खोज-शब्द की शुरुआत में वाइल्डकार्ड चरित्र के साथ, डेटाबेस सॉफ़्टवेयर अंतर्निहित अनुक्रमणिका डेटा संरचना का उपयोग करने में असमर्थ है (दूसरे शब्दों में, जहां-क्लॉज sargable नहीं है)। इस समस्या को किसी अन्य इंडेक्स को जोड़कर हल किया जा सकता है reverse(email_address) और इस तरह एक SQL क्वेरी: SELECT email_address FROM customers WHERE reverse(email_address) LIKE reverse('%@wikipedia.org');. यह वाइल्ड-कार्ड को क्वेरी के सबसे दाहिने हिस्से में रखता है (अब gro.aidepikiw@%), जिसे इंडेक्स रिवर्स (ईमेल_एड्रेस) पर संतुष्ट कर सकता है।

जब वाइल्डकार्ड वर्णों को खोज शब्द के दोनों ओर %wikipedia.org% के रूप में उपयोग किया जाता है, तो इस फ़ील्ड पर उपलब्ध अनुक्रमणिका का उपयोग नहीं किया जाता है। बल्कि केवल एक क्रमिक खोज की जाती है, जो लेती है $O(N)$ समय।

बिटमैप इंडेक्स
बिटमैप इंडेक्स एक विशेष प्रकार का इंडेक्सिंग है जो अपने डेटा के थोक को बिट एरेज़ (बिटमैप्स) के रूप में संग्रहीत करता है और इन बिटमैप्स पर बिटवाइज़ ऑपरेशन करके अधिकांश प्रश्नों का उत्तर देता है। सबसे अधिक उपयोग किए जाने वाले इंडेक्स, जैसे कि बी बी + पेड़, सबसे अधिक कुशल होते हैं यदि उनके द्वारा इंडेक्स किए जाने वाले मान कम संख्या में दोहराए या दोहराए नहीं जाते हैं। इसके विपरीत, बिटमैप इंडेक्स उन मामलों के लिए डिज़ाइन किया गया है जहां चर के मान बहुत बार दोहराए जाते हैं। उदाहरण के लिए, ग्राहक डेटाबेस में सेक्स फ़ील्ड में आमतौर पर अधिकतम तीन अलग-अलग मान होते हैं: पुरुष, महिला या अज्ञात (रिकॉर्ड नहीं किया गया)। ऐसे चरों के लिए, बिटमैप इंडेक्स का आमतौर पर उपयोग किए जाने वाले पेड़ों पर महत्वपूर्ण प्रदर्शन लाभ हो सकता है।

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

विरल सूचकांक
डेटाबेस में एक स्पार्स इंडेक्स एक फ़ाइल है जिसमें डेटा फ़ाइल में प्रत्येक ब्लॉक (डेटा स्टोरेज) के लिए कुंजी और पॉइंटर्स के जोड़े होते हैं। इस फ़ाइल की प्रत्येक कुंजी सॉर्ट की गई डेटा फ़ाइल में ब्लॉक के लिए एक विशेष पॉइंटर से जुड़ी होती है। डुप्लीकेट कुंजियों वाले संकुल सूचकांकों में, स्पार्स इंडेक्स प्रत्येक ब्लॉक में सबसे कम खोज कुंजी की ओर इशारा करता है।

रिवर्स इंडेक्स
एक रिवर्स-कुंजी इंडेक्स इंडेक्स में प्रवेश करने से पहले कुंजी मान को उलट देता है। उदाहरण के लिए, इंडेक्स में 24538 का मान 83542 हो जाता है। कुंजी मान को उलटना विशेष रूप से इंडेक्सिंग डेटा जैसे अनुक्रम संख्या के लिए उपयोगी होता है, जहां नए कुंजी मान मोनोटोनिक रूप से बढ़ते हैं।

प्राथमिक सूचकांक
प्राथमिक अनुक्रमणिका में तालिका के प्रमुख फ़ील्ड और तालिका के गैर-कुंजी फ़ील्ड के लिए सूचक होते हैं। जब डेटाबेस में तालिका बनाई जाती है तो प्राथमिक अनुक्रमणिका स्वचालित रूप से बनाई जाती है।

माध्यमिक सूचकांक
इसका उपयोग उन फ़ील्ड्स को इंडेक्स करने के लिए किया जाता है जो न तो ऑर्डरिंग फ़ील्ड्स हैं और न ही प्रमुख फ़ील्ड्स (इस बात का कोई आश्वासन नहीं है कि फ़ाइल कुंजी फ़ील्ड या प्राथमिक कुंजी फ़ील्ड पर व्यवस्थित है)। डेटा फ़ाइल (सघन सूचकांक) में प्रत्येक टपल के लिए एक अनुक्रमणिका प्रविष्टि में अनुक्रमित विशेषता का मान और ब्लॉक या रिकॉर्ड के सूचक होते हैं।

सूचकांक कार्यान्वयन
विभिन्न प्रकार की डेटा संरचनाओं का उपयोग करके सूचकांकों को लागू किया जा सकता है। लोकप्रिय सूचकांकों में संतुलित पेड़, बी+ पेड़ और हैश टेबल शामिल हैं। Microsoft SQL सर्वर में, क्लस्टर्ड इंडेक्स का लसीका नोड वास्तविक डेटा से मेल खाता है, न कि केवल डेटा के लिए एक पॉइंटर जो कहीं और रहता है, जैसा कि गैर-क्लस्टर्ड इंडेक्स के मामले में होता है। प्रत्येक संबंध में एक क्लस्टर्ड इंडेक्स और कई अनक्लस्टर्ड इंडेक्स हो सकते हैं।

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

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

एक कवरिंग इंडेक्स एक विशेष मामला है जहां इंडेक्स में आवश्यक डेटा फ़ील्ड होते हैं और आवश्यक डेटा का उत्तर दे सकते हैं।

निम्न तालिका पर विचार करें (अन्य क्षेत्रों को छोड़ दिया गया):

आईडी 13 के लिए नाम खोजने के लिए, (आईडी) पर एक इंडेक्स उपयोगी है, लेकिन नाम प्राप्त करने के लिए रिकॉर्ड को अभी भी पढ़ा जाना चाहिए। हालाँकि, (आईडी, नाम) पर एक इंडेक्स में आवश्यक डेटा फ़ील्ड होता है और रिकॉर्ड देखने की आवश्यकता समाप्त हो जाती है।

कवरिंग इंडेक्स प्रत्येक एक विशिष्ट तालिका के लिए होते हैं। कई तालिकाओं में शामिल होने/पहुंचने वाली क्वेरी संभावित रूप से इनमें से एक से अधिक तालिकाओं पर अनुक्रमणिका को कवर करने पर विचार कर सकती हैं।

एक कवरिंग इंडेक्स नाटकीय रूप से डेटा पुनर्प्राप्ति को गति दे सकता है लेकिन अतिरिक्त कुंजियों के कारण स्वयं बड़ा हो सकता है, जो डेटा प्रविष्टि और अद्यतन को धीमा कर देता है। ऐसे इंडेक्स आकार को कम करने के लिए, कुछ सिस्टम इंडेक्स में गैर-कुंजी फ़ील्ड शामिल करने की अनुमति देते हैं। गैर-कुंजी फ़ील्ड स्वयं इंडेक्स ऑर्डरिंग का हिस्सा नहीं हैं बल्कि केवल पत्ती के स्तर पर शामिल हैं, जो कम समग्र इंडेक्स आकार के साथ कवरिंग इंडेक्स की अनुमति देता है।

मानकीकरण
कोई मानक परिभाषित नहीं करता है कि इंडेक्स कैसे बनाया जाए, क्योंकि ISO SQL मानक भौतिक पहलुओं को कवर नहीं करता है। इंडेक्स स्टोरेज (टेबलस्पेस या फाइलग्रुप) जैसे अन्य लोगों के बीच डेटाबेस अवधारणा के भौतिक भागों में से एक हैं। RDBMS विक्रेता सभी कुछ विशिष्ट विकल्पों के साथ CREATE INDEX सिंटैक्स देते हैं जो उनके सॉफ़्टवेयर की क्षमताओं पर निर्भर करते हैं।