जब आप explain(true) . का उपयोग करते हैं आप देख सकते हैं कि अनुकूलक सूचकांक प्रतिच्छेदन का उपयोग करने पर विचार करता है और नहीं चुनता है:
"cursor" : "BtreeCursor Age", // Chosen plan.
...
"allPlans" : [
{
"cursor" : "BtreeCursor Age",
...
},
{
"cursor" : "BtreeCursor Name",
...
},
{
"cursor" : "Complex Plan", // Index intersection.
...
}
]
MongoDB पर्याप्त यौगिक सूचकांक होने पर कभी भी चौराहा नहीं चुनेंगे। इंडेक्स इंटरसेक्शन के लिए जीरा टिकट पर अन्य सीमाएं पाई जा सकती हैं:
क्वेरी ऑप्टिमाइज़र निम्न स्थितियों के होने पर इंडेक्स इंटरसेक्शन प्लान का चयन कर सकता है:
1. प्रासंगिक संग्रह में अधिकांश दस्तावेज़ डिस्क-निवासी हैं। इंडेक्स चौराहे का लाभ यह है कि चौराहे का आकार छोटा होने पर यह पूर्ण दस्तावेज लाने से बच सकता है। यदि दस्तावेज़ पहले से ही स्मृति में हैं, तो प्राप्त करने से बचने से कोई लाभ नहीं है।
2. क्वेरी विधेय एकल बिंदु अंतराल हैं, न कि श्रेणी विधेय या अंतराल के एक सेट के। एकल बिंदु अंतराल पर क्वेरीज़ डिस्क स्थान के आधार पर सॉर्ट किए गए दस्तावेज़ लौटाती हैं, जो ऑप्टिमाइज़र को उन योजनाओं का चयन करने की अनुमति देता है जो एक गैर-अवरुद्ध फैशन में चौराहे की गणना करते हैं। यह आम तौर पर प्रतिच्छेदन की गणना के वैकल्पिक मोड से तेज़ है, जो एक इंडेक्स से परिणामों के साथ हैश टेबल बनाना है, और फिर दूसरे इंडेक्स के परिणामों के साथ इसकी जांच करना है।
3. प्रतिच्छेद किए जाने वाले सूचकांकों में से कोई भी अत्यधिक चयनात्मक नहीं है। यदि सूचकांकों में से एक चयनात्मक है तो अनुकूलक एक योजना का चयन करेगा जो इस चयनात्मक सूचकांक को आसानी से स्कैन करता है।
4. प्रतिच्छेदन का आकार एकल-सूचकांक समाधान द्वारा स्कैन की गई अनुक्रमणिका कुंजियों की संख्या के सापेक्ष छोटा है। इस मामले में क्वेरी निष्पादक इंडेक्स चौराहे का उपयोग करके दस्तावेज़ों के एक छोटे से सेट को देख सकता है, संभावित रूप से हमें डिस्क से कम फ़ेच का लाभ प्राप्त करने की इजाजत देता है।
MongoDB चौराहे पर कई सीमाएँ हैं जिससे इसके वास्तव में उपयोग किए जाने की संभावना कम हो जाती है।