-
Type: Improvement
-
Resolution: Won't Fix
-
Priority: Major - P3
-
None
-
Affects Version/s: 2.6.4, 2.7.5
-
Component/s: Querying
-
None
In MongoDB 2.4.11, the bounds specified by $min/$max are included in the top-level indexBounds field of explain (as "start" and "end" sub-documents). However, when using $min/$max with MongoDB 2.6, these fields are not present. The index bounds are visible only in the "boundsVerbose" field of the IXSCAN stage ("indexBounds" in 2.7.5/master). Can the index-key-range-based bounds that are set by $min/$max be shown in the top-level indexBounds field, as they were in 2.4?
For example, given the index { b: 1, e: 1, f: 1, _id: 1 }, these queries behave as below in MongoDB 2.4.11:
> db.test.find({a: "foo", b: { $gte: 1, $lte: 3 }, c: 1, d: 2014, e: true, f: 1, _id: { $ne: 105 }}).min({b:1,e:true,f:1,_id:0}).max({b:3,e:true,f:1,_id:100000}).explain() { "cursor" : "BtreeCursor b_1_e_1_f_1__id_1", "isMultiKey" : false, "n" : 2, "nscannedObjects" : 945, "nscanned" : 945, "nscannedObjectsAllPlans" : 945, "nscannedAllPlans" : 945, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 3, "indexBounds" : { "start" : { "b" : 1, "e" : true, "f" : 1, "_id" : 0 }, "end" : { "b" : 3, "e" : true, "f" : 1, "_id" : 100000 } }, "server" : "genique:14804", "millis" : 3 }
Whereas in MongoDB 2.6.4:
> db.test.find({a: "foo", b: { $gte: 1, $lte: 3 }, c: 1, d: 2014, e: true, f: 1, _id: { $ne: 105 }}).min({b:1,e:true,f:1,_id:0}).max({b:3,e:true,f:1,_id:100000}).explain() { "cursor" : "BtreeCursor b_1_e_1_f_1__id_1", "isMultiKey" : false, "n" : 2, "nscannedObjects" : 945, "nscanned" : 946, "nscannedObjectsAllPlans" : 945, "nscannedAllPlans" : 946, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 7, "nChunkSkips" : 0, "millis" : 6, "indexBounds" : { }, "server" : "genique:24802", "filterSet" : false, "stats" : { "type" : "KEEP_MUTATIONS", "works" : 947, "yields" : 7, "unyields" : 7, "invalidates" : 0, "advanced" : 2, "needTime" : 944, "needFetch" : 0, "isEOF" : 1, "children" : [ { "type" : "FETCH", "works" : 947, "yields" : 7, "unyields" : 7, "invalidates" : 0, "advanced" : 2, "needTime" : 944, "needFetch" : 0, "isEOF" : 1, "alreadyHasObj" : 0, "forcedFetches" : 0, "matchTested" : 2, "children" : [ { "type" : "IXSCAN", "works" : 946, "yields" : 7, "unyields" : 7, "invalidates" : 0, "advanced" : 945, "needTime" : 1, "needFetch" : 0, "isEOF" : 1, "keyPattern" : "{ b: 1.0, e: 1.0, f: 1.0, _id: 1.0 }", "isMultiKey" : 0, "boundsVerbose" : "[{ : 1.0, : true, : 1.0, : 0.0 }, { : 3.0, : true, : 1.0, : 100000.0 })", "yieldMovedCursor" : 0, "dupsTested" : 0, "dupsDropped" : 0, "seenInvalidated" : 0, "matchTested" : 0, "keysExamined" : 946, "children" : [ ] } ] } ] } }
and 2.7.5:
> db.test.find({a: "foo", b: { $gte: 1, $lte: 3 }, c: 1, d: 2014, e: true, f: 1, _id: { $ne: 105 }}).min({b:1,e:true,f:1,_id:0}).max({b:3,e:true,f:1,_id:100000}).explain() { "cursor" : "BtreeCursor b_1_e_1_f_1__id_1", "isMultiKey" : false, "n" : 2, "nscannedObjects" : 945, "nscanned" : 946, "nscannedObjectsAllPlans" : 945, "nscannedAllPlans" : 946, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 2, "indexBounds" : { }, "server" : "genique:24802", "stats" : { "stage" : "KEEP_MUTATIONS", "nReturned" : 2, "executionTimeMillis" : 2, "works" : 947, "advanced" : 2, "needTime" : 944, "isEOF" : 1, "invalidates" : 0, "inputStage" : { "stage" : "FETCH", "filter" : { "$and" : [ { "$not" : { "_id" : { "$eq" : 105 } } }, { "b" : { "$lte" : 3 } }, { "a" : { "$eq" : "foo" } }, { "c" : { "$eq" : 1 } }, { "d" : { "$eq" : 2014 } }, { "e" : { "$eq" : true } }, { "f" : { "$eq" : 1 } }, { "b" : { "$gte" : 1 } } ] }, "nReturned" : 2, "executionTimeMillis" : 2, "works" : 947, "advanced" : 2, "needTime" : 944, "isEOF" : 1, "invalidates" : 0, "docsExamined" : 945, "alreadyHasObj" : 0, "inputStage" : { "stage" : "IXSCAN", "nReturned" : 945, "executionTimeMillis" : 1, "works" : 946, "advanced" : 945, "needTime" : 1, "isEOF" : 1, "invalidates" : 0, "keysExamined" : 946, "keyPattern" : { "b" : 1, "e" : 1, "f" : 1, "_id" : 1 }, "isMultiKey" : false, "indexBounds" : "[{ : 1.0, : true, : 1.0, : 0.0 }, { : 3.0, : true, : 1.0, : 100000.0 })", "dupsTested" : 0, "dupsDropped" : 0, "seenInvalidated" : 0, "matchTested" : 0 } } } }
- related to
-
SERVER-10448 Revamp explain() formatting
- Closed