多租户MongoDb索引

多租户MongoDb索引,mongodb,indexing,Mongodb,Indexing,我有两个集合,CustomSchema和customdata。除了默认的_id索引之外,我还添加了以下索引 db.customData.createIndex( { "orgId": 1, "contentType": 1 }); db.customSchemas.createIndex( { "orgId": 1, "contentType": 1 }, { unique: true }); 我决定对所有调用强制使用orgId,因此在我的服务层中,每个查询都有一个orgId,即使是带有ID的

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

db.customData.createIndex( { "orgId": 1, "contentType": 1 });
db.customSchemas.createIndex( { "orgId": 1, "contentType": 1 }, { unique: true });
我决定对所有调用强制使用orgId,因此在我的服务层中,每个查询都有一个orgId,即使是带有ID的查询,例如

db.customData.find({"_id" : ObjectId("557f30402598f1243c14403c"), orgId: 1});
我应该添加一个同时包含_id和orgId的索引吗?当我通过{u id:1}和
{org id:1}
中的索引前缀orgId进行搜索时,我当前拥有的索引对我有帮助吗?

MongoDB 2.6+提供了一种功能,可以通过使用索引{u id:1}的交集覆盖您的情况

所以您的查询
{“_id”:ObjectId(“557f3042598f243c1443c”),orgId:1}
应该已经包含在索引中了


然而,索引交集的性能不如
{“\u id:1,orgId:1}
上的复合索引,因为它附带了一个额外的步骤(两个集合的交集)。因此,如果这是一个大部分时间都在使用的查询,那么在其上创建复合索引是一个好主意。

\u id在MongoDB中应该是唯一的。没有理由在该查询中添加orgId:1原因是为了在多租户中强制执行完整性。您永远不希望使用orgId 1进行身份验证的用户能够请求orgId 2的数据。唯一确定的方法是对每个通过身份验证机制硬连接的查询强制执行orgId。继续你的生意是一个很好的理由。一个后续问题。索引中属性的顺序重要吗?{“{ ID”):1,“OrdID”:1 }与{“OrdID”有任何不同:1,“yID”:1 }。当创建复合索引用于搜索(不用于排序)时,您可以考虑首先用更明显的值来设置扫描过程,在这种情况下{“{ ID”):1,“OrdID”:1 }更有利。