MongoDB इंडेक्सिंग: createIndex() और dropIndex()

⚡ स्मार्ट सारांश

MongoDB इंडेक्स किसी कलेक्शन के फ़ील्ड्स के एक क्रमबद्ध उपसमूह को स्टोर करते हैं ताकि क्वेरी प्रत्येक रिकॉर्ड को स्कैन किए बिना दस्तावेज़ों का पता लगा सकें। createIndex, getIndexes और dropIndex विधियाँ इन प्रदर्शन-महत्वपूर्ण संरचनाओं को बनाती हैं, सूचीबद्ध करती हैं और हटाती हैं।

  • 🚀 उद्देश्य: सूचकांक अनुमति देते हैं MongoDB तेज़ पठन के लिए संपूर्ण संग्रह स्कैन को छोड़ दें।
  • इंडेक्स बनाएं: यह एकल-क्षेत्र या मिश्रित अनुक्रमणिकाओं को आरोही या अवरोही क्रम में बनाता है।
  • 🔍 सूचकांक प्राप्त करें: यह किसी कलेक्शन पर मौजूद सभी इंडेक्स को सूचीबद्ध करता है, जिसमें डिफ़ॉल्ट _id भी शामिल है।
  • ड्रॉपइंडेक्स: एक इंडेक्स हटाता है; dropIndexes _id को छोड़कर बाकी सभी इंडेक्स हटा देता है।
  • अदला - बदली: बहुत अधिक इंडेक्स होने से इंसर्ट, अपडेट और डिलीट की प्रक्रिया धीमी हो जाती है।
  • 🤖 एआई ट्यूनिंग: सहायक स्वचालित रूप से सही इंडेक्स की अनुशंसा करते हैं और उन्हें उत्पन्न करते हैं।

MongoDB इंडेक्सिंग क्रिएटइंडेक्स ड्रॉपइंडेक्स

क्या हैं MongoDB अनुक्रमणिका?

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

यदि आपके पास बिना इंडेक्स के हजारों दस्तावेजों का संग्रह है, और फिर आप कुछ दस्तावेजों को खोजने के लिए क्वेरी करते हैं, तो ऐसे मामले में MongoDB दस्तावेजों को खोजने के लिए पूरे संग्रह को स्कैन करना होगा। लेकिन अगर आपके पास इंडेक्स हैं, MongoDB इन अनुक्रमितों का उपयोग संग्रह में खोजे जाने वाले दस्तावेजों की संख्या को सीमित करने के लिए किया जाएगा।

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

सूचकांकों के प्रभाव को समझना

हालांकि परिचय में यह दिखाया गया है कि इंडेक्स क्वेरी के लिए अच्छे होते हैं, लेकिन बहुत अधिक इंडेक्स होने से इंसर्ट, डिलीट और अपडेट जैसी अन्य क्रियाएं धीमी हो सकती हैं।

यदि दस्तावेजों पर बार-बार इंसर्ट, डिलीट और अपडेट ऑपरेशन किए जाते हैं, तो इंडेक्स को भी उतनी ही बार बदलना होगा, जो कि संग्रह के लिए एक अतिरिक्त बोझ होगा।

नीचे दिया गया उदाहरण दर्शाता है कि किसी संग्रह में कौन से फ़ील्ड मान इंडेक्स का निर्माण कर सकते हैं। इंडेक्स संग्रह में केवल एक फ़ील्ड पर आधारित हो सकता है, या यह संग्रह में कई फ़ील्ड पर आधारित हो सकता है।

नीचे दिए गए उदाहरण में, एम्प्लॉई आईडी “1” और एम्प्लॉईCode संग्रह में मौजूद दस्तावेज़ों को अनुक्रमित करने के लिए "AA" का उपयोग किया जाता है। इसलिए, जब कोई खोज क्वेरी की जाती है, तो इन अनुक्रमणिकाओं का उपयोग संग्रह में आवश्यक दस्तावेज़ों को शीघ्रता और कुशलता से खोजने के लिए किया जाता है।

इसलिए भले ही खोज क्वेरी कर्मचारी पर आधारित होCode “एए”, वह दस्तावेज़ वापस कर दिया जाएगा।

सूचकांकों के प्रभाव को समझना

इंडेक्स कैसे बनाएं: createIndex()

इंडेक्स बनाना MongoDB का उपयोग करके किया जाता है createIndex विधि.

निम्नलिखित उदाहरण दर्शाता है कि किसी कलेक्शन में इंडेक्स कैसे जोड़ा जाता है। मान लीजिए कि हमारे पास वही एम्प्लॉई कलेक्शन है, जिसमें "Employeeid" और "EmployeeName" फ़ील्ड नाम हैं।

createIndex कमांड का उपयोग करके इंडेक्स बनाएं

db.Employee.createIndex({Employeeid:1})

Code स्पष्टीकरण:

  1. RSI createIndex विधि का उपयोग दस्तावेज़ के "कर्मचारी आईडी" के आधार पर एक सूचकांक बनाने के लिए किया जाता है।
  2. “1” पैरामीटर यह दर्शाता है कि जब “Employeeid” फ़ील्ड मानों के साथ इंडेक्स बनाया जाता है, तो उन्हें आरोही क्रम में सॉर्ट किया जाना चाहिए। कृपया ध्यान दें कि यह _id फ़ील्ड (जो प्रत्येक दस्तावेज़ को विशिष्ट रूप से पहचानता है) से भिन्न है। MongoDB यह स्वचालित रूप से बन जाता है। अब दस्तावेज़ों को एम्प्लॉई आईडी के अनुसार क्रमबद्ध किया जाएगा, न कि _id फ़ील्ड के अनुसार।

यदि कमांड सफलतापूर्वक निष्पादित हो जाती है, तो निम्नलिखित आउटपुट प्रदर्शित होगा:

आउटपुट:

createIndex आउटपुट

  1. numIndexesBefore: 1 कमांड चलाने से पहले इंडेक्स में फ़ील्ड मानों की संख्या को दर्शाता है। प्रत्येक संग्रह में _id फ़ील्ड होता है, जिसे फ़ील्ड मान के रूप में भी गिना जाता है, इसलिए numIndexesBefore 1 है।
  2. numIndexesAfter: 2 कमांड चलाने के बाद इंडेक्स में फ़ील्ड मानों की संख्या को दर्शाता है।
  3. “ok: 1” आउटपुट यह दर्शाता है कि ऑपरेशन सफल रहा और नया इंडेक्स कलेक्शन में जोड़ दिया गया है।

उपरोक्त कोड एक फ़ील्ड मान के आधार पर इंडेक्स बनाने का तरीका दर्शाता है, लेकिन एकाधिक फ़ील्ड मानों के आधार पर भी इंडेक्स बनाया जा सकता है। निम्नलिखित उदाहरण दिखाता है कि यह कैसे किया जा सकता है:

एकाधिक फ़ील्ड पर मिश्रित इंडेक्स बनाएँ

db.Employee.createIndex({Employeeid:1, EmployeeName:1})

अब createIndex विधि कई फ़ील्ड मानों को ध्यान में रखती है, जिसके कारण इंडेक्स "Employeeid" और "EmployeeName" के आधार पर बनाया जाएगा। Employeeid:1 और EmployeeName:1 यह दर्शाते हैं कि इंडेक्स इन दो फ़ील्ड मानों पर बनाया जाना चाहिए, जिसमें :1 आरोही क्रम को इंगित करता है। इसे संयुक्त इंडेक्स कहा जाता है।

इंडेक्स कैसे खोजें: getIndexes()

किसी सूचकांक को ढूँढना MongoDB का उपयोग करके किया जाता है सूचकांक प्राप्त करें विधि। निम्नलिखित उदाहरण दर्शाता है कि यह कैसे किया जा सकता है:

getIndexes का उपयोग करके इंडेक्स ढूंढें

db.Employee.getIndexes()

getIndexes विधि का उपयोग किसी संग्रह में सभी अनुक्रमितों को खोजने के लिए किया जाता है।

यदि कमांड सफलतापूर्वक निष्पादित हो जाती है, तो निम्नलिखित आउटपुट प्रदर्शित होगा:

आउटपुट:

getIndexes आउटपुट

आउटपुट एक दस्तावेज़ लौटाता है जो दर्शाता है कि संग्रह में दो इंडेक्स हैं: _id फ़ील्ड और Employeeid फ़ील्ड। :1 इंगित करता है कि इंडेक्स में फ़ील्ड मान आरोही क्रम में बनाए गए हैं।

इंडेक्स कैसे हटाएं: dropIndex()

इंडेक्स को हटाना MongoDB का उपयोग करके किया जाता है ड्रॉपइंडेक्स विधि। निम्नलिखित उदाहरण दर्शाता है कि यह कैसे किया जा सकता है:

dropIndex का उपयोग करके इंडेक्स हटाएं

db.Employee.dropIndex({Employeeid:1})

dropIndex विधि उन आवश्यक फ़ील्ड मानों को लेती है जिन्हें इंडेक्स से हटाने की आवश्यकता होती है।

यदि कमांड सफलतापूर्वक निष्पादित हो जाती है, तो निम्नलिखित आउटपुट प्रदर्शित होगा:

आउटपुट:

ड्रॉपइंडेक्स आउटपुट

  1. nIndexesWas: 3 कमांड चलाने से पहले इंडेक्स में फ़ील्ड मानों की संख्या को दर्शाता है। प्रत्येक संग्रह में _id फ़ील्ड होता है, जिसे फ़ील्ड मान के रूप में भी गिना जाता है।
  2. ok: 1 आउटपुट निर्दिष्ट करता है कि ऑपरेशन सफल रहा, और "Employeeid" फ़ील्ड को इंडेक्स से हटा दिया गया है।

संग्रह में मौजूद सभी इंडेक्स को एक साथ हटाने के लिए, आप dropIndexes कमांड का उपयोग कर सकते हैं। निम्नलिखित उदाहरण दर्शाता है कि यह कैसे किया जा सकता है:

dropIndexes कमांड का उपयोग करके सभी इंडेक्स हटा दें।

db.Employee.dropIndexes()

dropIndexes विधि _id इंडेक्स को छोड़कर सभी इंडेक्स को हटा देगी।

यदि कमांड सफलतापूर्वक निष्पादित हो जाती है, तो निम्नलिखित आउटपुट प्रदर्शित होगा:

आउटपुट:

ड्रॉपइंडेक्स आउटपुट

  1. nIndexesWas: 2 कमांड चलाने से पहले इंडेक्स में फ़ील्ड मानों की संख्या को इंगित करता है।
  2. प्रत्येक संग्रह में _id फ़ील्ड होता है, जिसे फ़ील्ड मान के रूप में भी गिना जाता है और इसे हटाया नहीं जाएगा। MongoDBयही इस संदेश का तात्पर्य है।
  3. ओके: 1 आउटपुट यह निर्दिष्ट करता है कि ऑपरेशन सफल रहा।

अक्सर पूछे जाने वाले प्रश्न

एकल-फ़ील्ड इंडेक्स एक फ़ील्ड को सॉर्ट करता है और केवल उसी फ़ील्ड पर फ़िल्टर करने वाली क्वेरी के लिए उपयुक्त होता है। कंपाउंड इंडेक्स एक ही संरचना में कई फ़ील्ड को कवर करता है और उन फ़ील्ड पर एक साथ फ़िल्टर या सॉर्ट करने वाली क्वेरी के लिए उपयुक्त होता है। कंपाउंड इंडेक्स 32 फ़ील्ड तक सपोर्ट करता है।

_id फ़ील्ड है MongoDB's प्राइमरी की है, इसलिए प्रत्येक कलेक्शन को स्वचालित रूप से एक अद्वितीय _id इंडेक्स मिलता है। इसे हटाया नहीं जा सकता। यही कारण है कि कोई भी कस्टम इंडेक्स जोड़ने से पहले ही numIndexesBefore 1 से शुरू होता है।

क्वेरी को .explain(“executionStats”) के साथ चलाएँ। विजेता योजना में, IXSCAN चरण का अर्थ है कि एक इंडेक्स का उपयोग किया गया था, जबकि COLLSCAN का अर्थ है MongoDB मैंने सभी दस्तावेजों को स्कैन कर लिया है और एक नया इंडेक्स बनाने से मदद मिल सकती है।

प्रत्येक इंडेक्स को कितनी बार एक्सेस किया जाता है, यह देखने के लिए $indexStats एग्रीगेशन स्टेज का उपयोग करें। बहुत कम उपयोग वाले इंडेक्स डिस्क स्पेस बर्बाद करते हैं और राइट ऑपरेशन धीमे होते हैं, इसलिए कलेक्शन को हल्का रखने के लिए उन्हें dropIndex कमांड से हटा दें।

एआई उपकरण धीमी क्वेरी लॉग का विश्लेषण करते हैं और यह सुझाव देते हैं कि किन फ़ील्ड को इंडेक्स किया जाना चाहिए। MongoDB'परफॉर्मेंस एडवाइजर' इंडेक्स अनुशंसाओं को प्रभाव और सहायता के आधार पर रैंक करता है।ping आप उच्च-मूल्य वाले इंडेक्स जोड़ते हैं और अनावश्यक इंडेक्स को छोड़ देते हैं।

जी हां। एआई कोपायलट सहायक साधारण अंग्रेजी में दिए गए अनुरोधों को सही क्रिएटइंडेक्स सिंटैक्स में परिवर्तित करते हैं, जिसमें आरोही या अवरोही कुंजी और मिश्रित फ़ील्ड क्रम शामिल होते हैं, और फिर परिणामी इंडेक्स की व्याख्या करते हैं।

ESR का मतलब है समानता, क्रम, सीमा। कंपाउंड इंडेक्स बनाते समय, समानता-मिलान फ़ील्ड को पहले रखें, फिर क्रम फ़ील्ड को, और फिर सीमा फ़िल्टर को। यह क्रम हमें यह सुविधा देता है कि... MongoDB सूचकांक का सबसे कुशल तरीके से उपयोग करें।

कवर्ड क्वेरी का उत्तर पूरी तरह से इंडेक्स से दिया जाता है, बिना दस्तावेज़ों को पढ़े। जब फ़िल्टर और प्रोजेक्शन में प्रत्येक फ़ील्ड एक ही इंडेक्स में मौजूद होता है, MongoDB इससे परिणाम तेजी से मिलते हैं।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: