我正在为一款应用创建多租户数据库。我选择了在每张表格中加入TenantID的方法,这种方法非常有效。现在我正处于性能调优阶段。
我的问题是,由于每个查询都会根据该列进行过滤,那么是否应该在每张表格中为每个TenantID建立索引以实现优化搜索?
期待您的建议。
谢谢。
我的问题是,由于每个查询都会根据该列进行过滤,那么是否应该在每张表格中为每个TenantID建立索引以实现优化搜索?
期待您的建议。
谢谢。
tenantId
应该是最左边的列,并且所有谓词和连接都应该包括 tenantId
。 - Remus Rusanucreate table EmployeeTable
(
employeeid int identity(1,1) primary key nonclustered,
tenantid int,
firstname varchar(200)
--... and so on
)
create unique clustered index IXCU__EmployeeTable__tenantId__EmployeeID
on EmployeeTable (tenantid, employeeid)
- Code Magician对于利用您设计的多租户特性的每个查询,您都需要拥有一个包含tenantId的索引。问题是,在索引结构中tenantId应该出现在哪里?当然答案是取决于情况。尝试构建索引,使具有最大选择性的字段首先出现。
例如,假设一张表在50个州之间均匀分布(50),并且有10个租户,我会构建State,然后是TenantId的索引;对于具有1000个租户的相同表格,我会构建TenantId,然后是State的索引。
在实践中,这两个索引都可能很有用(让优化器来解决)。