2015-12-21 52 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得到相同的结果