इस मामले में, अनुक्रमणिका मदद नहीं करती है क्योंकि आपके मिलान परिणाम सेट में लगभग संपूर्ण संग्रह होता है। इसका मतलब है कि इसे रैम में लोड करना होगा और अधिकांश इंडेक्स को पार करना होगा, साथ ही रैम में लोड करना होगा और दस्तावेजों को स्वयं पार करना होगा।
सूचकांक के बिना, यह सिर्फ एक टेबल स्कैन करेगा, प्रत्येक दस्तावेज़ का निरीक्षण करेगा और मिलान होने पर वापस आ जाएगा।
ऐसे मामलों में जहां एक क्वेरी लगभग पूरे संग्रह को लौटाने वाली है, एक अनुक्रमणिका सहायक नहीं हो सकती है।
.limit() जोड़ने से क्वेरी तेज हो जाएगी। आप क्वेरी ऑप्टिमाइज़र को .hint():
. के साथ इंडेक्स का उपयोग नहीं करने के लिए बाध्य कर सकते हैंdb.collection.find().hint({$natural:1})
आप चयनित फ़ील्ड को केवल आपके द्वारा अनुक्रमित किए गए फ़ील्ड तक सीमित करके सीधे इंडेक्स से ही परिणाम मान प्रदान करने के लिए क्वेरी को बाध्य कर सकते हैं। यह इसे इंडेक्स स्कैन करने के बाद किसी भी दस्तावेज़ को लोड करने की आवश्यकता से बचने की अनुमति देता है।
इसे आज़माएं और देखें कि क्या व्याख्या आउटपुट "indexOnly":true
. को इंगित करता है
db.numbers.find({number: {$gt: 10000}}, {number:1}).explain()
विवरण यहाँ: