这是我的数据集
{
"_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"}]}]})
我的索引应该是什么?
答案 0 :(得分:0)
您肯定需要ZIP
字段上的索引,因为这是一个有用的单个字段,其中包含您计划查询的大量分组。这使得它非常适合索引。
其他领域有点问题。他们几乎肯定 shoudln 被索引,因为你必须索引所有这些索引以获得完整的结果,并且索引所有这些将使写入操作很多慢一点。我认为你真正想要的是架构重新设计。怎么样的
{
"_id" : ObjectId("55e86e98f493590878bb4db1"),
"ZIP" : 37663,
"Age" : 35,
"Gender": "M/F/U"
}
此架构更好,原因有两个:
Age
和Gender
上制作索引而不会受到如此大的打击然后,您只需稍微更改一下查询即可使用$gt
,$lt
和$eq
来获得相同的结果