如何正确创建索引mongodb?

时间:2016-11-29 06:34:58

标签: mongodb mongodb-query mongodb-indexes

让我说我有这么大的文件。

其中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();

是不是错了?

我使这个指数仍然很慢。 请帮我正确索引。谢谢你

1 个答案:

答案 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});

因为你在查询

statusasset_group - 可以在索引前缀

中切换这些值

并在created.dt字段上排序 - 因此created.at shuold是索引前缀中的最后一个值。注意:在排序时,索引可以遍历相反的顺序。

对于其他查询,其他索引可能更合适。 详细了解compound indexes