在多租户DB中索引TenantID

时间:2011-11-16 00:06:06

标签: sql-server indexing multi-tenant performance

我正在为应用程序创建一个多租户数据库。我已经在每个表格方法中使用了TenantID,它运行得非常好。我正处于性能调整阶段。

我的问题是,每个表中的每个TenantID都应该被索引以进行优化搜索,因为db上的每个查询都会在此列上进行过滤吗?

期待任何建议。

由于

2 个答案:

答案 0 :(得分:5)

虽然索引时需要考虑很多因素,但根据我的经验,(唯一)聚簇索引与tenantId + PK一样好。所有PK查询都可以在复合键上查找。

这有一个额外的好处,就是将tenantID放在非聚簇索引中,因为SQL Server使用聚簇键作为从非聚簇索引返回表的引用。

注意页面拆分,因为插入几乎总是在页面中间,这种方法肯定会优化读取。考虑填充系数为70并观察您的碎片,确保定期进行索引维护(无论如何都要这样)

祝你好运。

答案 1 :(得分:0)

对于每个使用设计的多租户性质的查询,您都希望拥有一个包含tenantId的索引。问题是,在指数结构中应该出现租户吗?当然答案取决于它。尝试构建索引,以便首先选择具有最大选择性的字段。

例如,假设一个表在州(50)和10个租户之间具有均匀分布,我将索引建立为State,然后是TenantId;对于与1000个租户相同的表,我将建立索引TenantId,然后建立State。

实际上,两个索引都可能派上用场(让优化器对其进行排序)。