डेटाबेस अनुक्रमण सबसे आम तरीका है जिसे बैकएंड डेवलपर्स द्वारा डेटाबेस प्रश्नों को अनुकूलित करने के लिए जाना और उपयोग किया जाता है। इस लेख में, हम डेटाबेस अनुक्रमण के बारे में विस्तार से चर्चा करेंगे।
एक डेटाबेस इंडेक्स एक क्वेरी को एक कुशल तरीके से डेटाबेस से डेटा पुनर्प्राप्त करने की अनुमति देता है। सरल शब्दों में, अनुक्रमण एक अनियंत्रित तालिका को एक क्रम में लाने का एक तरीका है जो रिकॉर्ड की खोज करते समय दक्षता को अधिकतम करेगा।
अनुक्रमणिका विशिष्ट तालिकाओं से संबंधित हो सकती हैं और इनमें एक या अधिक कुंजियाँ होती हैं। साथ ही, एक तालिका में इससे निर्मित कई अनुक्रमणिकाएँ हो सकती हैं।
जब एक डेटाबेस तालिका को अनुक्रमित नहीं किया जाता है, तो पंक्तियों का कोई स्पष्ट क्रम नहीं होगा, इस प्रकार, किसी भी प्रश्न को पूरा करने के लिए, इसे पंक्तियों के माध्यम से रैखिक रूप से खोजना होगा, अर्थात क्वेरी को खोजने के लिए प्रत्येक पंक्ति के माध्यम से खोजना होगा मिलान शर्त के साथ पंक्तियाँ। जैसा कि आप कल्पना कर सकते हैं, यह आदर्श नहीं है और बड़ी मात्रा में डेटा के साथ डेटाबेस तालिका के अंदर देखते समय यह एक समस्या हो सकती है।
उदाहरण के लिए, हमारे पास एक तालिका है जैसा कि नीचे दिखाया गया है:
कंपनी आईडी | इकाई | इकाई लागत |
---|---|---|
10 | 12 | 1.15 |
12 | 12 | 1.05 |
14 | 18 | 1.31 |
18 | 18 | 1.34 |
1 1 | 24 | 1.15 |
16 | 12 | 1.31 |
10 | 12 | 1.15 |
12 | 24 | 1.3 |
18 | 6 | 1.34 |
18 | 12 | 1.35 |
14 | 12 | 1.95 |
21 | 18 | 1.36 |
12 | 12 | 1.05 |
20 | 6 | 1.31 |
18 | 18 | 1.34 |
1 1 | 24 | 1.15 |
14 | 24 | 1.05 |
और फिर, हम निम्नलिखित के रूप में एक क्वेरी चलाना चाहते हैं:
SELECT company_id, units, unit_cost FROM index_test WHERE company_id = 18
इस विशेष मामले में, डेटाबेस को 18 के रूप में company_id
के सभी संभावित उदाहरणों को देखने के लिए, ऊपर से नीचे तक, तालिका में दिखाई देने वाले क्रम में सभी 17 अभिलेखों के माध्यम से खोजना होगा।
तालिका का आकार बढ़ने पर इसमें केवल अधिक से अधिक समय लगेगा। अनुक्रमण यहाँ कैसे मदद कर सकता है? अनुक्रमण हमें क्वेरी प्रदर्शन को अनुकूलित करने के लिए क्रमबद्ध तरीके से (इस मामले में company_id
) पर खोज स्थिति के साथ कॉलम सेट करने में मदद कर सकता है।
company_id
कॉलम पर एक इंडेक्स के साथ, टेबल इस तरह दिखेगी:
कंपनी आईडी | इकाई | इकाई लागत |
---|---|---|
10 | 12 | 1.15 |
10 | 12 | 1.15 |
1 1 | 24 | 1.15 |
1 1 | 24 | 1.15 |
12 | 12 | 1.05 |
12 | 24 | 1.3 |
12 | 12 | 1.05 |
14 | 18 | 1.31 |
14 | 12 | 1.95 |
14 | 24 | 1.05 |
16 | 12 | 1.31 |
18 | 18 | 1.34 |
18 | 6 | 1.34 |
18 | 12 | 1.35 |
18 | 18 | 1.34 |
20 | 6 | 1.31 |
21 | 18 | 1.36 |
अब, डेटाबेस केवल 18 के बराबर company_id
की खोज कर सकता है और उस पंक्ति के लिए सभी अनुरोधित कॉलम लौटा सकता है, और फिर अगली पंक्ति में जा सकता है। यदि अगली पंक्ति में भी company_id
के रूप में 18 फिर से है, तो यह इस पंक्ति के लिए अनुरोध कॉलम भी लौटाएगा, लेकिन अगर अगली पंक्ति में company_id
18 है, तो डेटाबेस जानता है कि यह यहां खोज को रोक सकता है, और प्रतिक्रिया समाप्त कर सकता है .
डेटाबेस इंडेक्स क्या हैं और वे क्या कर सकते हैं, इसकी एक सरल व्याख्या थी, लेकिन इस प्रक्रिया में और भी बहुत कुछ चल रहा है। आइए गहराई से देखें कि अनुक्रमण कैसे काम करता है।
वास्तव में, डेटाबेस प्रदर्शन को अनुकूलित करने के लिए हर बार क्वेरी की स्थिति में परिवर्तन होने पर डेटाबेस तालिका स्वयं को पुन: व्यवस्थित नहीं करती है, लेकिन वास्तव में ऐसा होता है कि सूचकांक डेटाबेस को एक अलग डेटा संरचना बनाता है जिसे आसानी से क्रमबद्ध किया जाना चाहिए।
यह ध्यान रखना महत्वपूर्ण है कि जब किसी डेटाबेस में किसी कॉलम पर एक इंडेक्स बनाया जाता है, तो यह उस विशिष्ट कॉलम पर डेटा संरचना बनाता है और इस डेटा संरचना में कोई अन्य कॉलम संग्रहीत नहीं होता है। उदाहरण के लिए, उपरोक्त उदाहरण में, हमारी डेटा संरचना में केवल company_id
होगा और कोई अन्य कॉलम जैसे कि unit
या unit_cost
।
लेकिन यहां एक कानूनी सवाल सामने आता है - डेटाबेस को कैसे पता चलता है कि किसी क्वेरी के लिए तालिका में अन्य फ़ील्ड को वापस किया जाना है। आइए समझने की कोशिश करते हैं कि कैसे।
डेटाबेस इंडेक्स मेमोरी में अतिरिक्त जानकारी के स्थान के लिए केवल संदर्भ जानकारी के लिए पॉइंटर्स स्टोर करते हैं। दूसरे शब्दों में, अनुक्रमणिका company_id
और उस विशेष पंक्ति के पते को स्मृति में रखती है। इस उदाहरण में, डेटाबेस इंडेक्स कुछ इस तरह दिखेगा:
कंपनी आईडी | सूचक |
---|---|
10 | _123 |
10 | _129 |
1 1 | _127 |
1 1 | _138 |
12 | _124 |
12 | _130 |
12 | _135 |
14 | _125 |
14 | _131 |
14 | _133 |
16 | _128 |
18 | _126 |
18 | _131 |
18 | _132 |
18 | _137 |
20 | _136 |
21 | _134 |
इस इंडेक्स के साथ, क्वेरी company_id
कॉलम में पंक्तियों की जांच कर सकती है, जिसमें मान के रूप में 18 है और फिर पॉइंटर का उपयोग करके, यह उस रिकॉर्ड के लिए संबंधित जानकारी ढूंढ सकता है।
यह समझने के बाद कि हम सूचकांक से क्या अपेक्षा करते हैं, आइए उन सामान्य डेटा संरचनाओं पर एक नज़र डालते हैं जिनका उपयोग डेटाबेस अनुक्रमण के लिए किया जा सकता है:
बी-पेड़ सबसे अधिक उपयोग की जाने वाली इंडेक्स डेटा संरचनाएं हैं क्योंकि वे लुकअप, विलोपन और सम्मिलन के लिए तेज़ हैं। ये सभी ऑपरेशन लॉगरिदमिक समय में संभव हैं और बी-ट्री के भीतर मौजूद डेटा को आसानी से सॉर्ट किया जा सकता है।
हैश इंडेक्स आमतौर पर हैश टेबल का उपयोग करने वाले इंडेक्स का वर्णन करने के लिए उपयोग किया जाता है। क्योंकि हैश टेबल डेटा को देखने में विशेष रूप से कुशल हैं, सटीक मिलान की तलाश करने वाली क्वेरी को तेजी से संसाधित किया जा सकता है। हैश इंडेक्स में कुंजी कॉलम मान है, और हैश तालिका में मान तालिका के पंक्ति डेटा का संदर्भ है।
दूसरी ओर, हैश टेबल डेटा संरचनाओं का आदेश नहीं दिया जाता है; इसलिए, वे अन्य प्रकार की खोजों के लिए अक्षम हो सकते हैं।
आर-ट्री अक्सर स्थानिक डेटाबेस में उपयोग किया जाता है, आमतौर पर बहु-आयामी जानकारी जैसे भौगोलिक निर्देशांक, आयत, बहुभुज, आदि को अनुक्रमित करने के लिए उपयोग किया जाता है। यह खोजों के लिए उपयोगी है जैसे "मेरे स्थान के 2 मील के भीतर सभी कॉफी की दुकानों को ढूंढें।"
बिटमैप इंडेक्स उन स्तंभों के लिए उपयोगी होते हैं जिनमें ऐसे मूल्यों की अधिक संख्या होती है, अर्थात कम चयनात्मकता वाले स्तंभ। उदाहरण के लिए, बूलियन मान वाले कॉलम पर विचार करें।
इंडेक्स को डेटाबेस के प्रदर्शन को बढ़ाने के लिए डिज़ाइन किया गया है; इस प्रकार, जब भी हमें डेटाबेस के प्रदर्शन में उल्लेखनीय सुधार करने की आवश्यकता होती है, अनुक्रमण का उपयोग किया जा सकता है। आपका डेटाबेस जितना बड़ा होगा, इंडेक्सिंग से आपको फायदा होने की संभावना उतनी ही अधिक होगी।
हालांकि, याद रखने वाली पहली और महत्वपूर्ण बात यह है कि सूचकांक अतिरिक्त स्थान लेता है; इसलिए, तालिका जितनी बड़ी होगी, सूचकांक उतना ही बड़ा होगा। हर बार जब आप कोई ऐड, रिमूव या अपडेट ऑपरेशन करते हैं, तो उसी ऑपरेशन को इंडेक्स पर भी निष्पादित करने की आवश्यकता होगी।
जब डेटा डेटाबेस में लिखा जाता है, तो मूल तालिका को पहले अद्यतन किया जाता है, उसके बाद उस तालिका के आधार पर अन्य अनुक्रमणिकाएँ। जब डेटाबेस में एक लेखन किया जाता है, तो अनुक्रमणिका अद्यतन होने तक निष्क्रिय हो जाती हैं। यदि डेटाबेस लगातार लिख रहा है तो अनुक्रमणिका कभी भी कार्यात्मक नहीं होगी।
यही कारण है कि इंडेक्स अक्सर डेटा वेयरहाउस में डेटाबेस पर लागू होते हैं जो उत्पादन डेटाबेस के बजाय योजनाबद्ध आधार पर (ऑफ-पीक घंटों के दौरान) नया डेटा प्राप्त करते हैं जो हर समय नए लेखन प्राप्त कर सकते हैं।
निम्न कोड स्निपेट दिखाता है कि SQL डेटाबेस में एकल कॉलम पर एक इंडेक्स कैसे बनाया जाता है:
CREATE INDEX name_index ON Employee (Employee_Name);
यदि आप एकाधिक स्तंभों पर एक अनुक्रमणिका बनाना चाहते हैं, तो SQL कमांड कुछ इस तरह दिखाई देगी:
CREATE INDEX name_index ON Employee (Employee_Name, Employee_Age);
सामान्य तौर पर, एक इंडेक्स को टेबल पर तभी बनाया जाना चाहिए जब इंडेक्स किए गए कॉलम में डेटा अक्सर एक्सेस किया जाएगा।
इसलिए, हमने इस लेख में डेटाबेस इंडेक्सिंग पर विस्तार से चर्चा की और डेटाबेस इंडेक्सिंग को लागू करने के लिए उपयोग की जाने वाली डेटा संरचनाओं के बारे में भी सीखा और यह भी कि जब इंडेक्स का उपयोग करना उचित हो और अन्यथा।
सब कुछ समेटने के लिए, यहाँ एक त्वरित सारांश दिया गया है:
यह सब इस लेख के लिए है। डेटाबेस इंडेक्सिंग एक विशाल और थोड़ा जटिल विषय है, मुझे उम्मीद है कि यह लेख अवधारणा की मूल बातें समझने में मददगार होगा।
पढ़ते रहिये!