我正在努力提高我们的 SQL 性能。SQL Server Management Studio 给出了一个令我惊讶的建议。为了示例的缘故,我将简化表结构和 SSMS 给出的建议。
Person的表结构:
- ID
- 名
- 姓
- 出生日期
- 电子邮件
我有一个特定的查询,我显示了执行计划。然后我看到了 SSMS 给出的建议,这让我有点惊讶。建议添加两个具有以下签名的索引,这将分别提高 41% 和 53% 的性能:
CREATE NONCLUSTERED INDEX [person_1]
ON [Person]([first_name],[last_name])
INCLUDE ([id],[date_of_birth],[email])
CREATE NONCLUSTERED INDEX [person_2]
ON [Person]([first_name],[last_name])
INCLUDE ([id],[email])
这两个索引位于相同的列上。只有 INCLUDE 列不同。我从阅读索引中的理解是,第一个索引也包括第二个索引的数据。那么为什么 SSMS 推荐第二个索引以及第一个索引已经包含所需的数据呢?