Mongodb 说明显示快速执行时间,但运行查询永远不会返回
我有一个问题似乎永远不会回来。 当我对该查询运行Mongodb 说明显示快速执行时间,但运行查询永远不会返回,mongodb,mongodb-query,explain,Mongodb,Mongodb Query,Explain,我有一个问题似乎永远不会回来。 当我对该查询运行explain时,它会显示27毫秒的executionStats.executionTimeMillis,并且初始输入阶段是IXSCAN,应该只返回4个对象。 我已经确认,查询输入阶段查询只返回4个结果 这是我的疑问: {"$or":[ {"field1.key":{"$in":["name1","name2",/^prefix.*suffix$/]},"field2.key":"foobar"}, {"field1.key":{"
explain
时,它会显示27毫秒的executionStats.executionTimeMillis
,并且初始输入阶段是IXSCAN
,应该只返回4个对象。
我已经确认,查询输入阶段查询只返回4个结果
这是我的疑问:
{"$or":[
{"field1.key":{"$in":["name1","name2",/^prefix.*suffix$/]},"field2.key":"foobar"},
{"field1.key":{"$in":["name1","name2",/^prefix.*suffix$/]},"field3.key":"foobar"}
]}
这是解释({verbose:“executionStats”})
输出(很抱歉粘贴太长):
更新
看起来,尽管explain
提到了它,但它对$或的第一部分使用了“field2.key”
,对$或的第二部分使用了“field3.key”
,当查看db.currentOp()时,inprog
显示:
“计划摘要”:“IXSCAN{field1.key:1.0},IXSCAN{field3.key:1.0}”
因此,它为$或部分之一选择了错误的索引,从而使查询扫描了大量文档
你知道为什么explain
能够正确地获取索引,但查询本身却不能
使用$或时,我们如何提示
mongo使用正确的索引李>
您在db.currentOp().inprog
中看到查询了吗?planSummary
字段在相关op对象中包含什么内容?@Meni谢谢!这有助于我更好地理解这个问题。你能找到解决方案吗?我想我也有同样的问题。explain查询几乎立即返回,winningPlan
是正确的索引,但查询需要永远执行。db.currentOp().inprog
没有plansummmary
属性。
{
"queryPlanner" : {
"mongosPlannerVersion" : 1,
"winningPlan" : {
"stage" : "SHARD_MERGE",
"shards" : [
{
"shardName" : "...",
"plannerVersion" : 1,
"indexFilterSet" : false,
"parsedQuery" : { ... },
"winningPlan" : {
"stage" : "SUBPLAN",
"inputStage" : {
"stage" : "OR",
"inputStages" : [
{
"stage" : "FETCH",
"filter" : {"field1.key":{"$in":["name1","name2",/^prefix.*suffix$/]},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : { "field3.key" : 1.0 },
"indexName" : "field3.key_1",
"isMultiKey" : true,
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 1,
"direction" : "forward",
"indexBounds" : {
"field3.key" : [ "[\"foobar\", \"foobar\"]" ]
}
}
},
{
"stage" : "FETCH",
"filter" : {"field1.key":{"$in":["name1","name2",/^prefix.*suffix$/]},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : { "field2.key" : 1.0 },
"indexName" : "field2.key_1",
"isMultiKey" : true,
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 1,
"direction" : "forward",
"indexBounds" : {
"field2.key" : [ "[\"foobar\", \"foobar\"]" ]
}
}
}
]
}
},
"rejectedPlans" : []
},
...
// same plan for the 3 other shards
...
]
}
},
"executionStats" : {
"nReturned" : 0,
"executionTimeMillis" : 27,
"totalKeysExamined" : 4,
"totalDocsExamined" : 4,
"executionStages" : {
"stage" : "SHARD_MERGE",
"nReturned" : 0,
"executionTimeMillis" : 27,
"totalKeysExamined" : 4,
"totalDocsExamined" : 4,
"totalChildMillis" : NumberLong(63),
...
// execution times for each shard
...
},
"allPlansExecution" : []
},
"ok" : 1.0
}