2012-07-03 36 views
2

我正在使用Codeigniter(PHP)和MongoDB構建一個webapp。 我正在創建索引並有一個問題。確保索引時添加_id?

如果我查詢的三個字段(_id,狀態,類型),並希望 創建一個索引,我需要包括_id確保這樣的索引時:

db.comments.ensureIndex({_id: 1, status : 1, type : 1}); 

還是將因?

db.comments.ensureIndex({status : 1, type : 1}); 

回答

-2

您不需要在_id字段上隱式創建索引,它會自動完成。見mongo documentation

的_id指數

對所有集合除加蓋收集,爲_id字段自動創建一個索引。該索引是特殊的,不能刪除。 _id索引強制其鍵的唯一性(除了一些使用分片的情況)。

+1

是的,但是當我創建一個compond索引是不需要的呢? –

+0

@pangabiMC:'_id'字段是真的,如果你只是在_id上查詢,這很有用。最初的問題是關於在_id和其他兩個字段上搜索查詢的複合索引。 @JonathanClark:如果_id是搜索條件的一部分,並且您正在使用複合索引,則您**要包含_id。 – Stennie

+0

是的,我錯過了它是一個複合索引,所以我的答案實際上是無用的。如果可以的話,我會刪除它... – pangabiMC

3

MongoDB目前僅使用one index per query,但$or查詢例外。如果您的常用查詢將始終在這三個字段(_id,status,type)上進行搜索,那麼複合索引將會很有幫助。

從數據庫外殼中,您可以在查詢中使用explain()命令獲取有關所用索引的信息。

4

如果您想將其包含在複合索引中,則需要在您的ensureIndex調用中明確包含_id。但是,由於_id的過濾已經提供了單個文檔的選擇性,所以很少有正確的選擇。我認爲這隻有在你的文件非常大並且你正在嘗試使用covered indexes時纔有意義。