Mongodb 实际查询比解释显示的慢
我有大约20万个用户帖子的文档。我按顺序创建了以下索引-_id、用户组织、发布状态、用户id 用户的组织是字符串; post状态为整数(可能值为0,1,2); userid是字符串 我使用了下面的查询,它花费了4秒来完成Mongodb 实际查询比解释显示的慢,mongodb,mongodb-query,Mongodb,Mongodb Query,我有大约20万个用户帖子的文档。我按顺序创建了以下索引-_id、用户组织、发布状态、用户id 用户的组织是字符串; post状态为整数(可能值为0,1,2); userid是字符串 我使用了下面的查询,它花费了4秒来完成 db.tickets.find({o:"alphacorp", st:1, u:"myid"}).sort({_id:-1}).skip(0).limit(10) 因此,我使用了与explain相同的查询,正如您所看到的,nscanned的结果是11个对象,scanander
db.tickets.find({o:"alphacorp", st:1, u:"myid"}).sort({_id:-1}).skip(0).limit(10)
因此,我使用了与explain相同的查询,正如您所看到的,nscanned的结果是11个对象,scanander为false,需要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个对象并且统计数据看起来更快时,为什么我的查询没有解释就占用了这么多时间
我尝试过以各种模式运行查询、解释,然后再次运行查询。因此,这不是最初加载到内存的问题
所有操作都在“localhost”上,因此不涉及网络连接。在运行第二个查询之前是否重置了缓存?@Brody否。我没有。我以不同的顺序尝试了带&不带explain的查询,它显示了相同的输出。@BlakesSeven-否。当我连续运行同一个查询时,它不会减少查询时间。我明白你指的是什么,但奇怪的是,输出同样需要+/-几毫秒的时间…@BlakesSeven-是的。我试过这个序列。无解释(4秒)>有解释(3ms)>无解释(4秒)>无解释(4秒)>无解释(4秒)>无解释(4秒)>有解释(3ms)