-
Type:
Bug
-
Resolution: Done
-
Priority:
Major - P3
-
Affects Version/s: 2.6.0-rc0
-
Component/s: Index Maintenance, Querying
-
None
-
ALL
-
None
-
None
-
None
-
None
-
None
-
None
-
None
Collection has index
{o:1}and also
{o:1, m:1} where m is an array.
Optimizer picks o_1 instread of o_1_m_1 even though the latter results in no documents looked at and former results in 100 looked it...
test@local(2.6.0-rc0) > db.multi.find({o:"c",m:99999}).explain(true)
{
"cursor" : "BtreeCursor o_1",
"isMultiKey" : false,
"n" : 0,
"nscannedObjects" : 100,
"nscanned" : 100,
"nscannedObjectsAllPlans" : 100,
"nscannedAllPlans" : 103,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"o" : [
[
"c",
"c"
]
]
},
"allPlans" : [
{
"cursor" : "BtreeCursor o_1",
"isMultiKey" : false,
"n" : 0,
"nscannedObjects" : 100,
"nscanned" : 100,
"scanAndOrder" : false,
"indexOnly" : false,
"nChunkSkips" : 0,
"indexBounds" : {
"o" : [
[
"c",
"c"
]
]
}
},
{
"cursor" : "BtreeCursor o_1_m_1",
"isMultiKey" : true,
"n" : 0,
"nscannedObjects" : 0,
"nscanned" : 0,
"scanAndOrder" : false,
"indexOnly" : false,
"nChunkSkips" : 0,
"indexBounds" : {
"o" : [
[
"a",
"a"
]
],
"m" : [
[
99999,
99999
]
]
}
},
{
"cursor" : "BtreeCursor m_1",
"isMultiKey" : true,
"n" : 0,
"nscannedObjects" : 0,
"nscanned" : 0,
"scanAndOrder" : false,
"indexOnly" : false,
"nChunkSkips" : 0,
"indexBounds" : {
"m" : [
[
99999,
99999
]
]
}
},
{
"cursor" : "Complex Plan",
"n" : 0,
"nscannedObjects" : 0,
"nscanned" : 1,
"nChunkSkips" : 0
},
{
"cursor" : "Complex Plan",
"n" : 0,
"nscannedObjects" : 0,
"nscanned" : 2,
"nChunkSkips" : 0
},
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 0,
"nscannedObjects" : 0,
"nscanned" : 0,
"scanAndOrder" : false,
"indexOnly" : false,
"nChunkSkips" : 0
}
],
"server" : "asyasmacbook.local:27017",
"filterSet" : false,
"stats" : {
"type" : "FETCH",
"works" : 101,
"yields" : 0,
"unyields" : 0,
"invalidates" : 0,
"advanced" : 0,
"needTime" : 100,
"needFetch" : 0,
"isEOF" : 1,
"alreadyHasObj" : 0,
"forcedFetches" : 0,
"matchTested" : 0,
"children" : [
{
"type" : "IXSCAN",
"works" : 100,
"yields" : 0,
"unyields" : 0,
"invalidates" : 0,
"advanced" : 100,
"needTime" : 0,
"needFetch" : 0,
"isEOF" : 1,
"keyPattern" : "{ o: 1.0 }",
"boundsVerbose" : "field #0['o']: [\"c\", \"c\"]",
"isMultiKey" : 0,
"yieldMovedCursor" : 0,
"dupsTested" : 0,
"dupsDropped" : 0,
"seenInvalidated" : 0,
"matchTested" : 0,
"keysExamined" : 100,
"children" : [ ]
}
]
}
}
test@local(2.6.0-rc0) > db.multi.find({o:"c",m:99999}).explain()
{
"cursor" : "BtreeCursor o_1",
"isMultiKey" : false,
"n" : 0,
"nscannedObjects" : 100,
"nscanned" : 100,
"nscannedObjectsAllPlans" : 100,
"nscannedAllPlans" : 103,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"o" : [
[
"c",
"c"
]
]
},
"server" : "asyasmacbook.local:27017",
"filterSet" : false
}
- related to
-
SERVER-12866 explain should re-run all plans for that query but NOT mutate the cache
-
- Closed
-