क्वेरी प्लान की जानकारी के लिए MongoDB में explain() का उपयोग करें।
इंडेक्स बनाना और नमूना डेटा इंसर्ट करना
> db.demo637.ensureIndex({ClientName:1});
> db.demo637.insert({ClientName:"John"});
> db.demo637.insert({ClientName:"Bob"});
> db.demo637.insert({ClientName:"Johnson"});
केस 1: रेगेक्स /john/ (केस-इनसेंसिटिव पार्शियल मैच)
> db.demo637.find({ClientName:/john/}).explain();
महत्वपूर्ण आउटपुट भाग:
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"filter" : { "ClientName" : { "$regex" : "john" } },
"keyPattern" : { "ClientName" : 1 },
"indexName" : "ClientName_1",
"indexBounds" : { "ClientName" : [ "[\"\", {})", "[/john/, /john/]" ] }
}
}
व्याख्या: रेगेक्स /john/ (एंकर नहीं) इंडेक्स स्कैन (IXSCAN) का उपयोग करता है लेकिन फिल्टर लागू करना पड़ता है क्योंकि यह स्ट्रिंग में कहीं भी "john" खोजता है।
केस 2: रेगेक्स /^john/ (स्टार्ट्स विद - प्रीफिक्स मैच)
> db.demo637.find({ClientName:/^john/}).explain();
महत्वपूर्ण आउटपुट भाग:
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : { "ClientName" : 1 },
"indexName" : "ClientName_1",
"indexBounds" : { "ClientName" : [ "[\"john\", \"joho\")", "[/^john/, /^john/]" ] }
}
}
व्याख्या: रेगेक्स /^john/ (^ एंकर के साथ) इंडेक्स का अधिक कुशलता से उपयोग करता है क्योंकि यह प्रीफिक्स मैच है। इंडेक्स बाउंड्स "john" से "joho" तक की रेंज दिखाते हैं, जो अधिक सटीक है।
मुख्य अंतर: एंकर रहित रेगेक्स (/john/) की तुलना में एंकर वाले रेगेक्स (/^john/) इंडेक्स का बेहतर उपयोग करते हैं।