我有一个表Person
,其中包含personId, teamId, departmentId
列。大多数查询都使用这些列的组合。
实施例
Select * from .. where personId = 2 and departementId = 1
Select * from .. where personId = 2 and teamId = 1
Select * from .. where departmentId = 2 and teamId = 1
我的问题是,我应该单独为每个列创建一个索引吗?
答案 0 :(得分:2)
快速回答是肯定的 - 只需为每列添加一个索引。它不太可能是最理想的解决方案,但在大多数情况下它不会那么遥远,它可能不会造成任何伤害,除非你已经在该表上有很多索引。
唯一稍微长一点的答案是您应该测试您的查询代表性数据 - SQL Server Database Engine Tuning Advisor可以为您建议索引,但只有您可以检查要确保这些索引适用于其他所有查询(包括插入/更新) - 您需要在写入数据库时(以及任何存储/空间限制)平衡读取的性能与维护这些索引的成本。
答案 1 :(得分:2)
每列一个:SQL Server将使用Index Intersection
或者,尝试这样的事情:三个复合索引。每个的第一列也可用作“单列索引”。
departmentId, teamId, personId
personId, departmentId, teamId
teamId, personId, departmentId
注意:
SELECT *
不好此外,最好将外键列索引并且任一策略都可以使用
答案 2 :(得分:0)
我通常不会在字段使用的变化上创建3个索引,但这只是一般规则。
至于“我如何做这个新手”的答案,我会创建一个工作负载并使用调优顾问。它不是一个完整的解决方案,并且随着有人学到更多,他们超越了向导,但它是一个开始的好地方。确保你有一个不错的代表性样本,因为索引会破坏其他查询的性能,如果做错了。