我有大约200K的用户帖子文档。我按顺序创建了以下索引 - _id,用户的组织,帖子状态,用户ID
用户的组织是String; 帖子状态是整数(可能值0,1,2); userid是String。
我使用以下查询, 4秒完成...
db.tickets.find({o:"alphacorp", st:1, u:"myid"}).sort({_id:-1}).skip(0).limit(10)
那么,我在解释时使用相同的查询,你可以看到结果 nscanned 是11个对象, scanandorder 是假的,它花了 3ms < /强>
db.tickets.find({o:"alphacorp", st:1, u:"myid"}).sort({_id:-1}).skip(0).limit(10).explain("executionStats")
解释输出
{
"cursor" : "BtreeCursor _id_ reverse",
"isMultiKey" : false,
"n" : 10,
"nscannedObjects" : 11,
"nscanned" : 11,
"nscannedObjectsAllPlans" : 41,
"nscannedAllPlans" : 71,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 3,
"indexBounds" : {
"_id" : [
[
{
"$maxElement" : 1
},
{
"$minElement" : 1
}
]
]
},
"allPlans" : [...],
"server" : "Hoover:27017",
"filterSet" : false,
}
为什么我的查询没有解释需要花费这么多时间mongodb只扫描11个对象并且统计数据看起来更快?
我已尝试运行查询,然后解释,然后以各种模式再次查询。所以这不是最初加载到内存的问题。
所有操作都在&#34; localhost&#34;所以不涉及网络连接。