让我说我有这么大的文件。
其中2个人得到了这个对象数组;
{
status: "A",
group: "public",
"created.dt": ....
}
{
status: "A",
group: "private",
"created.dt": ....
}
我索引并确保这样:
db.collection.ensureIndex({"created.dt":-1});
db.collection.ensureIndex({"created.dt":-1, "status":1});
db.collection.ensureIndex({"created.dt":-1, "group":1});
db.collection.ensureIndex({"created.dt":-1, "status":1, "group":1});
查询:
db.collection.find(
{
"status": {
$in: ["A", "I"]
},
"asset_group": "public"
},
{
sort: {
'created.dt':1
}
}
).count();
是不是错了?
我使这个指数仍然很慢。 请帮我正确索引。谢谢你
答案 0 :(得分:6)
用于以下查询:
db.collection.find(
{
"status": {
$in: ["A", "I"]
},
"asset_group": "public"
},
{
sort: {
'created.dt':1
}
}
).count();
最佳指数是:
db.collection.ensureIndex({"status":1, "asset_group":1, "created.dt":1});
或
db.collection.ensureIndex({"asset_group":1, "status":1, "created.dt":-1});
因为你在查询
status
,asset_group
- 可以在索引前缀
并在created.dt
字段上排序 - 因此created.at
shuold是索引前缀中的最后一个值。注意:在排序时,索引可以遍历相反的顺序。
对于其他查询,其他索引可能更合适。 详细了解compound indexes。