|
Explain output for the query not using the SORT_MERGE stage:
> db.bar.find({$or: [{a: {$gt: 7}}, {a: {$gt: 6}}]}).sort({a: 1}).explain()
|
{
|
"queryPlanner" : {
|
"plannerVersion" : 1,
|
"namespace" : "test.bar",
|
"indexFilterSet" : false,
|
"parsedQuery" : {
|
"$or" : [
|
{
|
"a" : {
|
"$gt" : 7
|
}
|
},
|
{
|
"a" : {
|
"$gt" : 6
|
}
|
}
|
]
|
},
|
"winningPlan" : {
|
"stage" : "FETCH",
|
"inputStage" : {
|
"stage" : "IXSCAN",
|
"keyPattern" : {
|
"a" : 1
|
},
|
"indexName" : "a_1",
|
"isMultiKey" : true,
|
"isUnique" : false,
|
"isSparse" : false,
|
"isPartial" : false,
|
"indexVersion" : 1,
|
"direction" : "forward",
|
"indexBounds" : {
|
"a" : [
|
"(6.0, inf.0]"
|
]
|
}
|
}
|
},
|
"rejectedPlans" : [ ]
|
},
|
"serverInfo" : {
|
"host" : "rassi",
|
"port" : 27017,
|
"version" : "3.1.6-pre-",
|
"gitVersion" : "63863aefa21b33e6f84b8b466f70581dd921dba7"
|
},
|
"ok" : 1
|
}
|
Explain output for the query using the SORT_MERGE stage:
> db.bar.find({$or: [{a: {$gt: 7}, b: 1}, {a: {$gt: 6}, b: 1}]}).sort({a: 1}).explain()
|
{
|
"queryPlanner" : {
|
"plannerVersion" : 1,
|
"namespace" : "test.bar",
|
"indexFilterSet" : false,
|
"parsedQuery" : {
|
"$or" : [
|
{
|
"$and" : [
|
{
|
"b" : {
|
"$eq" : 1
|
}
|
},
|
{
|
"a" : {
|
"$gt" : 7
|
}
|
}
|
]
|
},
|
{
|
"$and" : [
|
{
|
"b" : {
|
"$eq" : 1
|
}
|
},
|
{
|
"a" : {
|
"$gt" : 6
|
}
|
}
|
]
|
}
|
]
|
},
|
"winningPlan" : {
|
"stage" : "SORT_MERGE",
|
"sortPattern" : {
|
"a" : 1
|
},
|
"inputStages" : [
|
{
|
"stage" : "FETCH",
|
"filter" : {
|
"b" : {
|
"$eq" : 1
|
}
|
},
|
"inputStage" : {
|
"stage" : "IXSCAN",
|
"keyPattern" : {
|
"a" : 1
|
},
|
"indexName" : "a_1",
|
"isMultiKey" : true,
|
"isUnique" : false,
|
"isSparse" : false,
|
"isPartial" : false,
|
"indexVersion" : 1,
|
"direction" : "forward",
|
"indexBounds" : {
|
"a" : [
|
"(7.0, inf.0]"
|
]
|
}
|
}
|
},
|
{
|
"stage" : "FETCH",
|
"filter" : {
|
"b" : {
|
"$eq" : 1
|
}
|
},
|
"inputStage" : {
|
"stage" : "IXSCAN",
|
"keyPattern" : {
|
"a" : 1
|
},
|
"indexName" : "a_1",
|
"isMultiKey" : true,
|
"isUnique" : false,
|
"isSparse" : false,
|
"isPartial" : false,
|
"indexVersion" : 1,
|
"direction" : "forward",
|
"indexBounds" : {
|
"a" : [
|
"(6.0, inf.0]"
|
]
|
}
|
}
|
}
|
]
|
},
|
"rejectedPlans" : [ ]
|
},
|
"serverInfo" : {
|
"host" : "rassi",
|
"port" : 27017,
|
"version" : "3.1.6-pre-",
|
"gitVersion" : "63863aefa21b33e6f84b8b466f70581dd921dba7"
|
},
|
"ok" : 1
|
}
|
Edit: The internalQueryPlanOrChildrenIndependently parameter was set to 'false' for the above two executions in order to simplify the explain output, though the same problem also manifests when the flag is set to true.
|