如何正确创建索引 mongodb?

Posted

技术标签:

【中文标题】如何正确创建索引 mongodb?【英文标题】:how to create index mongodb properly? 【发布时间】:2017-04-13 01:21:21 【问题描述】:

假设我有这么大的文件。

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

错了吗?

在我使这个索引仍然很慢之后。 请帮我正确索引。谢谢

【问题讨论】:

没有看到您的查询就无法判断(例如:查找、排序等) @FirdausRamlan 好吧,我已经编辑了那个帖子。 【参考方案1】:

对于以下查询:

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 应该是索引前缀中的最后一个值。注意:排序时索引可以逆序遍历。

对于其他查询,其他索引可能更合适。 阅读有关compound indexes 的更多信息。

【讨论】:

以上是关于如何正确创建索引 mongodb?的主要内容,如果未能解决你的问题,请参考以下文章

不同类型的 MongoDB 索引

MongoDB - 如何提高创建索引的性能?

如何在MongoDB集合上创建索引

MongoDB-我如何创建索引有什么问题?

基于gt和lt创建mongodb索引

mongodb常见问题:索引