2012-03-14 56 views
3

我試圖理解爲什麼這種情況正在發生:MongoDB的限制()和sort()優化

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」的東西,但它仍然掃描了很多文件。

這對我來說是一個巨大的問題,因爲這是我的本地數據庫,所以只掃描了一些文檔,但是在我的現場網站中,我有很多文檔被掃描,其原因是我不知道它是。

任何人都可以解釋我發生了什麼事嗎?

+0

你有什麼其他的指標?也許嘗試{uid:1,id:-1}而不是... – 2012-03-14 10:43:04

+0

我已經嘗試索引,{uid:1,id:-1}和{id:-1,uid:1}!並沒有成功... – 2012-03-14 14:13:13

回答