CodeGym/Java Course/All lectures for HI purposes/इंडेक्स: इंडेक्स

इंडेक्स: इंडेक्स

उपलब्ध

7.1 सूचकांकों के दिखने के कारण

एक और महत्वपूर्ण चीज जिसके बिना कोई डेटाबेस नहीं हो सकता है वह है इंडेक्स।

ऐसी स्थिति की कल्पना करें जहां उपयोगकर्ता तालिका में 10 मिलियन उपयोगकर्ता हैं , और आप 90 से ऊपर के स्तर वाले प्रत्येक व्यक्ति को प्रदर्शित करना चाहते हैं। यह प्रश्न लिखना बहुत सरल है:

SELECT * FROM user WHERE level > 90

बढ़िया, हमने एक मिनट से भी कम समय में अनुरोध लिख दिया। और SQL सर्वर से इस क्वेरी को निष्पादित करने में कितना समय लगेगा? इस तरह की क्वेरी को निष्पादित करने के लिए, उसे 10 मिलियन रिकॉर्ड से गुजरना होगा, और यदि केवल एक ही रिकॉर्ड है, तो इसमें बहुत समय लगेगा।

हम जावा में समान कार्य कैसे करेंगे? हम पहले उपयोगकर्ताओं के संग्रह को स्तर के आधार पर छाँटेंगे, और फिर हम बाइनरी खोज का उपयोग करके बहुत जल्दी आवश्यक रिकॉर्ड पा सकते हैं। मुझे आशा है कि मुझे यह समझाने की आवश्यकता नहीं है कि यह क्या है?

बढ़िया, लेकिन क्या होगा अगर हमें अब उन उपयोगकर्ताओं को चुनने की आवश्यकता है जिनकी पंजीकरण तिथि 2020 से पहले थी? पंजीकरण तिथि के अनुसार फिर से छाँटें और बाइनरी खोज का उपयोग करें।

हाँ, यदि हम किसी क्षेत्र पर एक फ़िल्टर करते हैं, और केवल एक बार नहीं, बल्कि अक्सर, तो इस क्षेत्र द्वारा क्रमबद्ध डेटा को संग्रहीत करना बहुत उपयोगी होगा।

और अलग-अलग फ़ील्ड्स द्वारा एक साथ सॉर्ट किए गए डेटा को कैसे स्टोर करें?

और उत्तर बहुत सरल है - आपको डेटा को स्वयं नहीं, बल्कि कुछ वैश्विक तालिका में उनके अनुक्रमित करने की आवश्यकता है।

मान लीजिए कि आईडी वाले 10 उपयोगकर्ता हैं {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}:।

और आप उन्हें स्तर के अनुसार क्रमबद्ध करने का निर्णय लेते हैं, तो उनकी आईडी की सरणी, उदाहरण के लिए, इस तरह होगी: {9, 2, 3, 1, 5, 4, 8, 6, 7, 10}.

और यदि हम उन्हें तिथि के अनुसार क्रमबद्ध करते हैं, तो हमें मिलता है, उदाहरण के लिए: {10, 1, 8, 7, 2, 3, 5, 9, 6}.

इन आईडी के ऐरे को इंडेक्स कहा जाता है । तत्व स्वयं बड़े हैं, हम उन्हें छूते नहीं हैं। जावा में, हम वस्तुओं को स्पर्श नहीं करते हैं, लेकिन उनके संदर्भों को संग्रहीत करते हैं; SQL में, हम वास्तविक स्ट्रिंग्स को स्पर्श नहीं करते हैं, लेकिन उनकी संख्याओं को संग्रहीत करते हैं।

मुझे इसे जावा कोड में फिर से लिखने दें:

List<String> list = List.of("A", "C", "B", "Z", "Cc", "Bb", "Zz", "Y");  //this is a list of objects
List<String> alphabeticsList = new ArrayList(list);
Collections.sort(alphabeticsList); //collection sorted alphabetically

List<String> lengthList = new ArrayList(list);
Collections.sort(lengthList, lengthComparator); //collection sorted by string length

सॉर्टिंग संग्रह का अर्थ वास्तविक तत्वों को स्थानांतरित करना नहीं है। संग्रह वास्तविक वस्तुओं को संग्रहीत नहीं करता है, लेकिन उनसे लिंक करता है। SQL तालिकाओं के लिए भी यही सच है। असली रेखाएँ अपने आप में झूठ बोलती हैं और झूठ बोलती हैं।

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

मुझे उम्मीद है कि जावा तुलना ने थोड़ी मदद की। थोड़ा अभ्यास - और आपके लिए अनुक्रमणिका का उपयोग भी सबसे स्पष्ट समाधान बन जाएगा।

7.2 तालिका में अनुक्रमणिका जोड़ना

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

तालिका में अनुक्रमणिका जोड़ना बहुत सरल है:

ALTER TABLE table
    ADD INDEX index_name (column);

यदि आप अक्सर एक ही समय में कई कॉलम में रिकॉर्ड देखते हैं, तो आप एक समग्र अनुक्रमणिका निर्दिष्ट कर सकते हैं: SQL इसे बनाने के लिए एकाधिक कॉलम का उपयोग करता है।

तालिका में समग्र अनुक्रमणिका जोड़ना भी बहुत सरल है:

ALTER TABLE table
    ADD INDEX index_name (column 1, column 2, column 3, ...);

इंडेक्स बहुत अधिक डिस्क स्थान लेते हैं, इसलिए यदि आपको अब इंडेक्स की आवश्यकता नहीं है, तो आप इसे हमेशा हटा सकते हैं:

ALTER TABLE table
    DROP INDEX index_name;

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

लेकिन यह देखते हुए कि आज की दुनिया में गति कितनी महत्वपूर्ण है और डिस्क स्थान कितना सस्ता है, सभी अवसरों के लिए अनुक्रमणिका जोड़ने में संकोच न करें। मुझे माफ कर दो व्यवस्थापक ...

टिप्पणियां
  • लोकप्रिय
  • नया
  • पुराना
टिप्पणी लिखने के लिए आपको साइन इन करना होगा
इस पेज पर अभी तक कोई टिप्पणियां नहीं हैं