我試圖理解爲什麼這種情況正在發生: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」的東西,但它仍然掃描了很多文件。
這對我來說是一個巨大的問題,因爲這是我的本地數據庫,所以只掃描了一些文檔,但是在我的現場網站中,我有很多文檔被掃描,其原因是我不知道它是。
任何人都可以解釋我發生了什麼事嗎?
你有什麼其他的指標?也許嘗試{uid:1,id:-1}而不是... – 2012-03-14 10:43:04
我已經嘗試索引,{uid:1,id:-1}和{id:-1,uid:1}!並沒有成功... – 2012-03-14 14:13:13