MongoDB में संयुक्त इंडेक्स में महारथ
यह गाइड MongoDB में संयुक्त इंडेक्स की पेचीदगियों में तल्लीन करता है, जो डेटाबेस प्रदर्शन को अनुकूलित करने के लिए एक महत्वपूर्ण तकनीक है। हम उनके मौलिक कामकाज को समझने से लेकर उनकी प्रभावशीलता का विश्लेषण करने और सामान्य समस्याओं का निवारण करने तक सब कुछ कवर करेंगे।
- संयुक्त इंडेक्स को समझना
- संयुक्त इंडेक्स बनाना
- संयुक्त इंडेक्स के साथ क्वेरी करना
- इंडेक्स उपयोग का विश्लेषण
- उत्तम अभ्यास और अनुकूलन
- अक्सर पूछे जाने वाले प्रश्न
1. संयुक्त इंडेक्स को समझना
MongoDB में, एक संयुक्त इंडेक्स एक ही दस्तावेज़ के भीतर कई फ़ील्ड्स में फैला हुआ एक इंडेक्स है। सिंगल-फ़ील्ड इंडेक्स के विपरीत, जो केवल एक फ़ील्ड पर क्वेरी को तेज करते हैं, संयुक्त इंडेक्स कई फ़ील्ड्स को शामिल करने वाली क्वेरी की गति को नाटकीय रूप से बढ़ाते हैं, जिससे एप्लिकेशन के प्रदर्शन पर महत्वपूर्ण प्रभाव पड़ता है। इंडेक्स के भीतर फ़ील्ड्स का क्रम महत्वपूर्ण है; MongoDB दस्तावेज़ों का कुशलतापूर्वक पता लगाने के लिए इस क्रम का उपयोग करता है।
इंडेक्स के प्रमुख फ़ील्ड्स से मेल खाने वाली क्वेरी को सबसे अधिक लाभ मिलता है। यदि कोई क्वेरी केवल प्रमुख फ़ील्ड्स का उपयोग करती है, तो फ़िल्टरिंग और सॉर्टिंग दोनों के लिए इंडेक्स का पूरी तरह से उपयोग किया जाता है। हालाँकि, यदि कोई क्वेरी इंडेक्स से परे फ़ील्ड्स का उपयोग करती है, तो MongoDB शायद आंशिक रूप से इंडेक्स का उपयोग करेगा, संभावित रूप से शेष मानदंडों के लिए संग्रह स्कैन पर वापस आ जाएगा, जिससे प्रदर्शन में वृद्धि को नकारात्मक रूप से प्रभावित करेगा।
उदाहरण के लिए, category
, price
और name
फ़ील्ड के साथ products
संग्रह पर विचार करें। { "category": 1, "price": -1 }
पर एक संयुक्त इंडेक्स category
द्वारा फ़िल्टरिंग और फिर अवरोही क्रम में price
द्वारा सॉर्टिंग करने वाली क्वेरी को अनुकूलित करता है।
2. संयुक्त इंडेक्स बनाना
db.collection.createIndex()
विधि का उपयोग करके संयुक्त इंडेक्स बनाना सरल है। तर्क एक दस्तावेज़ है जहाँ कुंजियाँ फ़ील्ड नामों का प्रतिनिधित्व करती हैं और मान क्रम क्रम का प्रतिनिधित्व करते हैं (आरोही के लिए 1, अवरोही के लिए -1)।
// श्रेणी (आरोही) और मूल्य (अवरोही) पर एक संयुक्त इंडेक्स बनाएँ
db.products.createIndex( { category: 1, price: -1 } );
// कई फ़ील्ड्स पर एक संयुक्त इंडेक्स बनाएँ, जिसमें अलग-अलग क्रम क्रम हों
db.users.createIndex( { firstName: 1, lastName: -1, age: 1 } );
// अद्वितीय और विरल विकल्प जोड़ें
db.products.createIndex( { category: 1, price: -1 }, { unique: true, sparse: true } );
unique: true
इंडेक्स किए गए फ़ील्ड्स में विशिष्टता लागू करता है, जबकि sparse: true
केवल उन दस्तावेज़ों को इंडेक्स करता है जहाँ इंडेक्स किए गए फ़ील्ड्स शून्य नहीं हैं।
3. संयुक्त इंडेक्स के साथ क्वेरी करना
यदि क्वेरी प्रमुख फ़ील्ड्स से मेल खाती है और क्रम क्रम संरेखित होता है, तो MongoDB का क्वेरी ऑप्टिमाइज़र स्वचालित रूप से एक संयुक्त इंडेक्स का उपयोग करता है। उदाहरण के लिए, निम्न क्वेरी { "category": 1, "price": -1 }
इंडेक्स से लाभान्वित होती है:
db.products.find( { category: "Electronics" } ).sort( { price: -1 } );
यह क्वेरी category
(प्रमुख इंडेक्स फ़ील्ड) द्वारा फ़िल्टर करती है और price
(इंडेक्स के क्रम क्रम से मेल खाती है) द्वारा सॉर्ट करती है। हालाँकि, यह क्वेरी उतना लाभ नहीं देगी:
db.products.find( { price: { $lt: 100 } } ).sort( { category: 1 } );
price
प्रमुख फ़ील्ड नहीं है, और क्रम क्रम इंडेक्स के साथ संरेखित नहीं होता है।
4. इंडेक्स उपयोग का विश्लेषण
इंडेक्स उपयोग का विश्लेषण करने के लिए db.collection.find().explain()
का उपयोग करें। यह क्वेरी निष्पादन योजना के बारे में विस्तृत जानकारी प्रदान करता है, जिसमें किन इंडेक्स का उपयोग किया गया था (या नहीं) और निष्पादन समय शामिल हैं।
db.products.find( { category: "Electronics" } ).sort( { price: -1 } ).explain();
“executionStats” अनुभाग की जाँच करें। यदि इंडेक्स का उपयोग किया जाता है, तो आप इंडेक्स कुंजी उपयोग और जाँचे गए दस्तावेज़ों की संख्या देखेंगे। “COLLSCAN” एक पूर्ण संग्रह स्कैन को इंगित करता है, जो इंडेक्स उपयोग से कम कुशल है।
5. उत्तम अभ्यास और अनुकूलन
सावधानीपूर्वक इंडेक्स चयन महत्वपूर्ण है। अधिक इंडेक्सिंग लिखने के संचालन को धीमा कर देती है, जबकि कम इंडेक्सिंग अकुशल क्वेरी की ओर ले जाती है। बार-बार उपयोग किए जाने वाले क्वेरी पैटर्न को प्राथमिकता दें, आवश्यकतानुसार क्रमिक रूप से इंडेक्स जोड़ें। नियमित रूप से इंडेक्स उपयोग की निगरानी करें और आवेदन की आवश्यकताओं के आधार पर समायोजित करें। सरल इंडेक्स प्रबंधन के लिए MongoDB Compass GUI का उपयोग करने पर विचार करें।
6. अक्सर पूछे जाने वाले प्रश्न
- मुझे कितने संयुक्त इंडेक्स बनाने चाहिए? इष्टतम संख्या आपके एप्लिकेशन के क्वेरी पैटर्न पर निर्भर करती है। अधिक इंडेक्सिंग से बचने के लिए संतुलन की आवश्यकता है।
- क्या होगा यदि मेरी क्वेरी इंडेक्स से पूरी तरह मेल नहीं खाती है? MongoDB इंडेक्स के कुछ हिस्सों का उपयोग कर सकता है लेकिन फिर भी बेमेल भागों के लिए संग्रह स्कैन का सहारा ले सकता है।
- क्या मैं मिश्रित आरोही/अवरोही फ़ील्ड के साथ संयुक्त इंडेक्स बना सकता हूँ? हाँ, इष्टतम प्रदर्शन के लिए क्रम महत्वपूर्ण है।
- मैं एक संयुक्त इंडेक्स कैसे हटा सकता हूँ?
db.collection.dropIndex()
का उपयोग करें, इंडेक्स नाम या विशिष्टता निर्दिष्ट करें:
// नाम से हटाएँ
db.products.dropIndex("category_1_price_-1");
// विशिष्टता से हटाएँ
db.products.dropIndex( { category: 1, price: -1 } );