Mongodb 实际查询比解释显示的慢

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

我有大约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为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)