2014-12-04 96 views
2

我有幾個關於MongoDB的問題:MongoDB索引和投影

(1)索引是否有助於投影? (2)我已經爲一個集合分配了多個索引,並嘗試運行一個帶有排序的查找,然後使用explain,它顯示了BtreeCursor索引的排序字段。

難道是其他索引在查詢部分幫助過,而explain只是沒有顯示它,因爲它只顯示了幫助查找的最後一個索引?

explain應該顯示幫助查詢,排序等的所有索引?

謝謝。

回答

6

索引是否有助於投影?

我相信這將真正幫助(通過性能等定義的)唯一的一次是,如果查詢被「覆蓋」:http://docs.mongodb.org/manual/tutorial/create-indexes-to-support-queries/

因此,舉例來說,如果你想在{d:1, e:2}查詢並取回{_id, t, e} ,你會怎麼做:

db.t.ensureIndex({d:1 , e:1, _id:1, t:1}); 
db.t.find({d:1, e:2}, {_id:1, t:1, e:1}); 

這查詢的explain()輸出將顯示indexOnly的真諦,它永遠不會從磁盤上載入的文件返回響應。

所以,是的,索引可以幫助預測在某些情況下。

我已經爲一個集合分配了一些索引,並嘗試運行一個帶有排序的查找,然後使用explain,它顯示了排序字段上的BtreeCursor索引。

是的。

難道是其他的索引幫助查詢部分,解釋只是沒有顯示它,因爲它只顯示幫助查找的最後一個索引?

如果您是索引相交的受害者,那麼您將使用explain(true)來顯示所有使用的索引計劃。

很好地注意到單獨的索引不用於查找和排序與交集,所以這裏的答案實際上是否定的:http://docs.mongodb.org/manual/core/index-intersection/#index-intersection-and-sort