SQL Server执行计划建议创建一个包含表中所有列的索引

时间:2017-04-05 14:35:50

标签: sql-server tsql

我有一个包含2列的关键表:KeyId

在我编写的存储过程中,我的代码将Employee表加入Key列,然后选择Id - 类似这样的内容:

SELECT 
    E.EmployeeName, K.Id 
FROM 
    Employee E
JOIN 
    KeyTable K ON E.Key = K.Key 

执行计划建议创建以下索引:

[schema].[Employee] ([Key]) INCLUDE ([Id])

我的问题是为什么?如果所有信息都在表中,那么为什么要创建索引并复制该信息?

1 个答案:

答案 0 :(得分:2)

仅仅因为所有信息都在“表中”,这并不意味着搜索整个表将是获得此查询结果的最有效方式。 / p>

在这里,服务器说,如果有一种方法可以快速定位此表中的行,给定Key值,则查询应该能够更快地处理(而不是100%)其建议可靠,所以你应该在实施前进行测试。)

如果表是堆(没有聚簇索引),或者对于聚簇键与查询的所需访问顺序不匹配的聚簇表,则可能是这样。

另外,如果您考虑一下 - 每个(非群集)索引都会重复信息。它通常只是信息的一个子集而不是整个集合。