इंडेक्स क्यों?
दो प्रमुख बिंदुओं को समझें।
- जबकि एक इंडेक्स किसी इंडेक्स से बेहतर नहीं है, लेकिन सही इंडेक्स या तो बहुत बेहतर है।
- MongoDB केवल एक इंडेक्स प्रति क्वेरी का उपयोग करेगा, जो उचित फ़ील्ड ऑर्डर के साथ कंपाउंड इंडेक्स बना रहा है जिसे आप शायद उपयोग करना चाहते हैं।
इंडेक्स मुफ्त नहीं हैं। वे मेमोरी लेते हैं, और आवेषण, अपडेट और हटाते समय एक प्रदर्शन जुर्माना लगाते हैं। आम तौर पर प्रदर्शन हिट नगण्य होता है (विशेष रूप से पढ़ने के प्रदर्शन में लाभ की तुलना में), लेकिन इसका मतलब यह नहीं है कि हम कुछ इंडेक्स बनाने के बारे में स्मार्ट नहीं हो सकते हैं।
कैसे सूचकांक
खेतों के किस समूह को एक साथ अनुक्रमित किया जाना चाहिए, यह पहचानना कि आपके द्वारा चलाए जा रहे प्रश्नों को समझना है। आपके अनुक्रमणिका को बनाने के लिए उपयोग किए गए फ़ील्ड का क्रम महत्वपूर्ण है। अच्छी खबर यह है कि, अगर आपको ऑर्डर गलत मिलता है, तो इंडेक्स का उपयोग बिल्कुल नहीं किया जाएगा, इसलिए स्पष्टीकरण के साथ हाजिर करना आसान होगा।
क्यों छंटनी हो रही है?
आपके प्रश्नों को क्रमबद्ध करने की आवश्यकता हो सकती है। लेकिन छंटनी एक महंगा ऑपरेशन हो सकता है, इसलिए उन फ़ील्ड्स का इलाज करना महत्वपूर्ण है जिन्हें आप किसी फ़ील्ड की तरह ही सॉर्ट कर रहे हैं जिसे आप क्वेरी कर रहे हैं। तो यह तेजी से होगा अगर इसमें सूचकांक है। हालांकि, एक महत्वपूर्ण अंतर यह है कि जिस क्षेत्र को आप छांट रहे हैं वह आपके सूचकांक में अंतिम क्षेत्र होना चाहिए। इस नियम का एकमात्र अपवाद यह है कि यदि फ़ील्ड आपकी क्वेरी का भी हिस्सा है, तो अंतिम-नियम लागू नहीं होना चाहिए।
कैसे छँटते हैं
आप इंडेक्स की सभी कुंजियों पर या एक सबसेट पर एक प्रकार निर्दिष्ट कर सकते हैं; हालाँकि, सॉर्ट कुंजी को उसी क्रम में सूचीबद्ध किया जाना चाहिए जैसा कि वे सूचकांक में दिखाई देते हैं। उदाहरण के लिए, एक इंडेक्स की पैटर्न {a: 1, b: 1} {a: 1, b: 1} पर एक प्रकार का समर्थन कर सकता है, लेकिन {b: 1, a: 1} पर नहीं।
सॉर्ट को इंडेक्स की पैटर्न के रूप में अपनी सभी कुंजियों के लिए समान सॉर्ट दिशा (यानी आरोही / अवरोही) निर्दिष्ट करनी चाहिए या इंडेक्स कुंजी पैटर्न के रूप में इसके सभी कुंजी के लिए रिवर्स सॉर्ट दिशा निर्दिष्ट करना चाहिए। उदाहरण के लिए, एक इंडेक्स की पैटर्न {a: 1, b: 1} {a: 1, b: 1} और {a: -1, b: -1} पर एक प्रकार का समर्थन कर सकता है, लेकिन {a: -1 पर नहीं। , बी: 1}।
मान लीजिए कि ये सूचकांक हैं:
{ a: 1 }
{ a: 1, b: 1 }
{ a: 1, b: 1, c: 1 }
Example Index Used
db.data.find().sort( { a: 1 } ) { a: 1 }
db.data.find().sort( { a: -1 } ) { a: 1 }
db.data.find().sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: -1, b: -1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: 1, b: 1, c: 1 } ) { a: 1, b: 1, c: 1 }
db.data.find( { a: { $gt: 4 } } ).sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
1, 3, 2, 6, 5, 4, 7
?