यदि मैं शैल से एक मोंगो क्वेरी को समझाने के साथ चलाता हूं(), इस्तेमाल किए गए इंडेक्स का नाम प्राप्त करें और फिर उसी क्वेरी को दोबारा चलाएं, लेकिन संकेत() के साथ उसी इंडेक्स को निर्दिष्ट करने के लिए निर्दिष्ट करें - "मिलिस" फ़ील्ड समझाए जाने से योजना काफीमोंगो संकेत एक क्वेरी को 10 गुना तेजी से क्यों चलाता है?
उदाहरण के लिए कम हो जाती है
कोई संकेत प्रदान की:
>>db.event.find({ "type" : "X", "active" : true, "timestamp" : { "$gte" : NumberLong("1317498259000") }, "count" : { "$gte" : 0 } }).limit(3).sort({"timestamp" : -1 }).explain();
{
"cursor" : "BtreeCursor my_super_index",
"nscanned" : 599,
"nscannedObjects" : 587,
"n" : 3,
"millis" : 24,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : true,
"indexOnly" : false,
"indexBounds" : { ... }
}
संकेत प्रदान की:
>>db.event.find({ "type" : "X", "active" : true, "timestamp" : { "$gte" : NumberLong("1317498259000") }, "count" : { "$gte" : 0 } }).limit(3).sort({"timestamp" : -1 }).hint("my_super_index").explain();
{
"cursor" : "BtreeCursor my_super_index",
"nscanned" : 599,
"nscannedObjects" : 587,
"n" : 3,
"millis" : 2,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : true,
"indexOnly" : false,
"indexBounds" : { ... }
}
एकमात्र अंतर "मिलिस" फ़ील्ड
क्या किसी को पता है कि वह क्यों है?
अद्यतन: "कौन सी अनुक्रमणिका का उपयोग करना है" का चयन नहीं करता है, क्योंकि जहां तक मुझे पता है, मोंगो, प्रत्येक एक्स (100?) रनों के लिए इंडेक्स का चयन करता है, इसलिए यह अगले संकेत के साथ जितना तेज़ होना चाहिए (एक्स -1) रन
या तो सूचकांक चीजों को इतना तेज है, या आप बस एक कैश्ड क्वेरी, जो बहुत ज्यादा बहुत कम भूमि के ऊपर है फिर से क्रियान्वित कर रहे हैं। –
मुझे नहीं लगता कि यह कैशिंग के कारण है। यदि मैं 2, 3 या 10 बार संकेत के बिना एक ही क्वेरी चलाता हूं तो यह बहुत तेज़ नहीं होगा, लेकिन यह हमेशा संकेत के साथ महत्वपूर्ण रूप से तेज़ी से बढ़ता है। –
क्या आप अपना प्रश्न संपादित कर सकते हैं ताकि खोजने के आउटपुट (...) को शामिल किया जा सके। संकेत के बिना समझाएं (सत्य)। वह अतिरिक्त जानकारी प्रिंट करेगा जो इसे डीबग करने में मदद कर सकता है। – mstearn