2013-06-26 85 views
0

假設我有一個蒙戈數據庫具有以下文件如果每個屬性都在mongodb集合中編入索引,我是否需要複合索引?

{ 
    "name" : "abc", 
    "email": "[email protected]", 
    "phone" : "+91 1234567890" 
} 

收集有很多對象(一萬左右),而我的應用程序,除了定期將對象添加到這個集合的集合,並這些數據有幾種不同類型的發現。

一種方法做了所有的三個屬性(姓名,電子郵件和電話)發現,這樣我就可以讓那些三個字段一個綜合指數,以確保這一發現工作effiently。

db.mycollection.ensureIndex({name:1,email:1,phone:1}) 

現在,我也有我的應用程序的方法,其提取所有具有相同名稱的對象(壞的榜樣,我知道)。所以我需要一個名稱字段的索引。

db.mycollection.ensureIndex({name:1}) 

漸漸地,我的應用程序增長到一個點,我必須索引其他領域。

現在,我的問題。如果我將每個屬性分別編入索引,那麼維護所有三個屬性(或兩個屬性)的組合索引是否仍然有意義?

顯然,這是一個壞榜樣......如果我犯了個集合來存儲多個聯繫人信息的人,我會使用數組。但是,這個問題純粹是關於索引。

+0

這一切都取決於你查詢的性質真的...有太多的指標較差性能(如果有大量的插件)。對於複合索引,例如,您不能僅在'phone'上進行搜索。請確保您閱讀本節:http://docs.mongodb.org/manual/core/indexes/#compound-indexes – WiredPrairie

回答

0

只是回答我自己完成的緣故問題:
複合索引並不意味着每一個單獨的屬性進行索引,只在複合索引的第一個屬性可以單獨與效率的找到使用。這個想法是爲了平衡並優化查詢,因爲索引太多會增加磁盤存儲和插入時間。

0

這取決於您的查詢。

如果你正在做一個查詢,如:

db.mycollection.find({"name": "abc", email: "[email protected]", phone: "+91 1234567890"}); 

然後綜合指數將是最有效的。

+0

是的,我正在做這個查詢。這很明顯。我的問題是..如果我也在做一個查詢,我通過2個屬性或只有一個屬性進行搜索,我還需要爲這些查找添加索引。那麼我是否還需要維護複合索引?或者我甚至需要單獨的索引? – Munim