【问题标题】:When to create an Index and when not to何时创建索引,何时不创建
【发布时间】:2015-01-26 21:40:40
【问题描述】:

我正在使用 MongoDB Native 2.0+。 我有一个名为services 的集合。此集合包含在另一个集合中引用 clients 的文档。这意味着,每个服务都由一个客户“拥有”。

将有大约 50-200 个客户。 理论上每个客户可以“拥有”大约 1-50 个服务,但实际上对于大多数客户来说可能是 1-10 个左右。

每个服务都有两个字段作为唯一标识符。一种是_id,用于管理 URL 和文档之间的不可变引用。另一个是slug,这是一个更简单的标识符,主要用于公共 URL 以提高可读性。

我对这个集合主要有两种查询:

db.services.find({client: clientID, _id: id}).toArray(callback)
db.services.find({client: clientID, slug: slug}).toArray(callback)

认为我必须创建以下两个复合索引以获得最佳查询:

db.services.ensureIndex({client: 1, _id: 1})
db.services.ensureIndex({client: 1, slug: 1})

但考虑到每个客户“拥有”的服务数量可能很小(?)。也许只需要一个索引就足够了。要么……

db.services.ensureIndex({client: 1})

或者只是这一个复合索引

db.services.find({client: clientID, slug: slug}).toArray(callback)

...因为slug 查询的使用可能比`_id 更多。

你会创建什么索引?

感谢您提供有关此问题的所有提示!

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    在我看来 _idslug 在服务集合中都是唯一的,所以我不明白搜索 client 值将如何提高性能在 _idslug 上分别有简单的索引。

    当然_id 会有一个开箱即用的索引,所以我认为您只需要创建{slug: 1} 索引。

    【讨论】:

      猜你喜欢
      • 2016-03-16
      • 2020-06-02
      • 2011-03-18
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多