针对MultiTenant的MongoDb索引

时间:2015-12-21 22:35:44

标签: mongodb indexing

我有两个集合,customSchemas和customdata。除了默认的_id索引外,我还添加了以下索引

db.customData.createIndex( { "orgId": 1, "contentType": 1 });
db.customSchemas.createIndex( { "orgId": 1, "contentType": 1 }, { unique: true });

我已决定对所有来电强制执行,因此在我的服务层中,每个查询都有一个orgId,即使是带有ids的orgId,例如

db.customData.find({"_id" : ObjectId("557f30402598f1243c14403c"), orgId: 1});

我应该添加一个同时包含_id和orgId的索引吗?当我通过_id和orgId进行搜索时,我目前是否有帮助的索引?

1 个答案:

答案 0 :(得分:0)

MongoDB 2.6+通过在{{1}中使用 index _id {_id:1}索引前缀orgId 的交集来提供涵盖您案例的index intersection功能}}

因此,您的查询{ "orgId": 1, "contentType": 1 }应该已被索引涵盖。

然而,索引交集的性能低于{"_id" : ObjectId("557f30402598f1243c14403c"), orgId: 1}上的复合索引,因为它带有一个额外的步骤(两个集合的交集)。因此,如果这是您在大多数时间使用的查询,则在其上创建复合索引是个好主意。