我有幾個關於MongoDB的問題:MongoDB索引和投影
(1)索引是否有助於投影? (2)我已經爲一個集合分配了多個索引,並嘗試運行一個帶有排序的查找,然後使用explain
,它顯示了BtreeCursor
索引的排序字段。
難道是其他索引在查詢部分幫助過,而explain
只是沒有顯示它,因爲它只顯示了幫助查找的最後一個索引?
或explain
應該顯示幫助查詢,排序等的所有索引?
謝謝。
我有幾個關於MongoDB的問題:MongoDB索引和投影
(1)索引是否有助於投影? (2)我已經爲一個集合分配了多個索引,並嘗試運行一個帶有排序的查找,然後使用explain
,它顯示了BtreeCursor
索引的排序字段。
難道是其他索引在查詢部分幫助過,而explain
只是沒有顯示它,因爲它只顯示了幫助查找的最後一個索引?
或explain
應該顯示幫助查詢,排序等的所有索引?
謝謝。
索引是否有助於投影?
我相信這將真正幫助(通過性能等定義的)唯一的一次是,如果查詢被「覆蓋」: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