2015-12-21 125 views
0

這是我的數據集蒙戈DB索引..我應該如何索引集合

{ 
    "_id" : ObjectId("55e86e98f493590878bb4db1"), 
    "ZIP" : 37663, 
    "ADULTS_M_18_24" : "Y", 
    "ADULTS_F_18_24" : "", 
    "ADULTS_U_18_24" : "", 
    "ADULTS_M_25_34" : "", 
    "ADULTS_F_25_34" : "", 
    "ADULTS_U_25_34" : "", 
    "ADULTS_M_35_44" : "", 
    "ADULTS_F_35_44" : "", 
    "ADULTS_U_35_44" : "", 
    "ADULTS_M_45_54" : "", 
    "ADULTS_F_45_54" : "", 
    "ADULTS_U_45_54" : "", 
    "ADULTS_M_55_64" : "", 
    "ADULTS_F_55_64" : "", 
    "ADULTS_U_55_64" : "", 
    "ADULTS_M_65_74" : "", 
    "ADULTS_F_65_74" : "", 
    "ADULTS_U_65_74" : "", 
    "ADULTS_M_75PLUS" : "", 
    "ADULTS_F_75PLUS" : "", 
    "ADULTS_U_75PLUS" : "" 
} 

有超過2億次的記錄

我需要運行此查詢

db.consumer1s.find({$and:[{ZIP:37663},{$or:[{ADULTS_M_18_24:"Y"},{ADULTS_M_25_34:"Y"},{ADULTS_F_25_34:"Y"}]}]}) 

我應該我指數是?

回答

0

您絕對需要ZIP字段的索引,因爲這是一個有用的單個字段,包含您計劃查詢的相當數量的分組。這使得它非常適合索引。

其餘的字段有點問題。他們幾乎可以肯定地是shoudln't被索引,因爲你必須索引所有這些才能獲得完整結果,並且索引所有這些將會使寫入操作減慢太多。我認爲你真正想要的是一個架構重新設計。關於類似

{ 
    "_id" : ObjectId("55e86e98f493590878bb4db1"), 
    "ZIP" : 37663, 
    "Age" : 35, 
    "Gender": "M/F/U" 
} 

該模式是什麼原因有二更好:

  1. 大部分不失你需要
  2. 您可以在兩個AgeGender指標沒有這樣的信息的任何更具可讀性極端命中

然後你只需要改變你的查詢有點使用$gt,$lt和可能的$eq得到相同的結果