MongoDB limit()和sort()优化

时间:2012-03-14 01:26:48

标签: mongodb

我试图理解为什么会这样:

db.items.find({uid: {$in:[34, 54, 53,1,2,3,5,6,7]} }).limit(40).sort({_id:-1}).explain()

给我回复:

"cursor" : "BtreeCursor _id_-1_uid_1 multi",
"nscanned" : 167,
"nscannedObjects" : 40,
"n" : 40,
...

然而,没有排序

db.items.find({uid: {$in:[34, 54, 53,1,2,3,5,6,7]} }).limit(40).explain()

给我回复:

"cursor" : "BtreeCursor uid_1 multi",
"nscanned" : 40,
"nscannedObjects" : 40,
"n" : 40,
...

所以我没有得到的是,为什么当我添加排序时,它会扫描更多文档?我按 id排序,我也有这个索引来尝试改进“ _id_-1_uid_1”,但它仍会扫描很多文档。

在我的情况下,这是一个很大的问题,因为这是我的本地数据库,因此只扫描了一些文档,但是在我的实际网站中,我扫描了数以千计的文档,原因我不知道它是什么是

有谁能解释一下发生了什么事?

1 个答案:

答案 0 :(得分:3)

目前(2012/3/14),这是一个尚未解决的问题:

https://jira.mongodb.org/browse/SERVER-3310