mongo db indexing ..我该如何索引集合

时间:2015-12-21 20:59:02

标签: mongodb

这是我的数据集

{
    "_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" : ""
}

拥有超过200000000条记录

我需要运行此查询

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

我的索引应该是什么?

1 个答案:

答案 0 :(得分:0)

您肯定需要ZIP字段上的索引,因为这是一个有用的单个字段,其中包含您计划查询的大量分组。这使得它非常适合索引。

其他领域有点问题。他们几乎肯定 shoudln 被索引,因为你必须索引所有这些索引以获得完整的结果,并且索引所有这些将使写入操作很多慢一点。我认为你真正想要的是架构重新设计。怎么样的

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

此架构更好,原因有两个:

  1. 在不丢失任何所需信息的情况下更具可读性
  2. 您可以在AgeGender上制作索引而不会受到如此大的打击
  3. 然后,您只需稍微更改一下查询即可使用$gt$lt$eq来获得相同的结果