MongoDB-এ $or অপারেটর ব্যবহার করার সময় ইন্ডেক্স কাজ করে কিনা তা যাচাই করতে explain() মেথড ব্যবহার করা হয়।
ইন্ডেক্স তৈরি করা
> db.indexOrQueryDemo.ensureIndex({"First":1});
আউটপুট
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
দ্বিতীয় ইন্ডেক্স তৈরি
> db.indexOrQueryDemo.ensureIndex({"Second":1});
আউটপুট
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 3, "numIndexesAfter" : 4, "ok" : 1 }
$or কোয়েরি explain()সহ
> db.indexOrQueryDemo.find({$or:[{First:1}, {Second:2}]}).explain();
এক্সপ্লেইন আউটপুট (সংক্ষিপ্ত)
{ "queryPlanner" : { "plannerVersion" : 1, "namespace" : "test.indexOrQueryDemo", "parsedQuery" : { "$or" : [ { "First" : { "$eq" : 1 } }, { "Second" : { "$eq" : 2 } } ] }, "winningPlan" : { "stage" : "SUBPLAN", "inputStage" : { "stage" : "FETCH", "inputStage" : { "stage" : "OR", "inputStages" : [ { "stage" : "IXSCAN", "keyPattern" : { "First" : 1 }, "indexName" : "First_1" }, { "stage" : "IXSCAN", "keyPattern" : { "Second" : 1 }, "indexName" : "Second_1" } ] } } } }, "ok" : 1 }
বিশ্লেষণ
winningPlan-এORস্টেজ দেখতে পাচ্ছি- প্রতিটি শর্তের জন্য পৃথক
IXSCAN(ইন্ডেক্স স্ক্যান) হচ্ছে First_1এবংSecond_1ইন্ডেক্স দুটোই ব্যবহার হচ্ছে- MongoDB
$orকোয়েরিতে প্রতিটি ক্লজের জন্য আলাদা ইন্ডেক্স ব্যবহার করতে পারে
সর্বোত্তম অনুশীলন
$or-এর প্রতিটি শর্তের জন্য পৃথক ইন্ডেক্স থাকা উচিত- কম্পাউন্ড ইন্ডেক্স
$or-এ সরাসরি কাজ করে না explain()নিয়মিত ব্যবহার করে কোয়েরি প্ল্যান যাচাই করুন