何时创建索引以及何时不创建索引

时间:2015-01-26 21:40:41

标签: mongodb

我正在使用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更多地使用。

您会创建哪些索引?

感谢您提供有关此事项的所有提示!

1 个答案:

答案 0 :(得分:1)

在我看来,_idslug在服务集合中都是唯一的,所以我不明白如何搜索client只需在_idslug上单独设置简单索引,就可以提高性能。

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