我有一个包含2列的关键表:Key
,Id
。
在我编写的存储过程中,我的代码将Employee
表加入Key
列,然后选择Id
- 类似这样的内容:
SELECT
E.EmployeeName, K.Id
FROM
Employee E
JOIN
KeyTable K ON E.Key = K.Key
执行计划建议创建以下索引:
[schema].[Employee] ([Key]) INCLUDE ([Id])
我的问题是为什么?如果所有信息都在表中,那么为什么要创建索引并复制该信息?
答案 0 :(得分:2)
仅仅因为所有信息都在“表中”,这并不意味着搜索整个表将是获得此查询结果的最有效方式。 / p>
在这里,服务器说,如果有一种方法可以快速定位此表中的行,给定Key
值,则查询应该能够更快地处理(而不是100%)其建议可靠,所以你应该在实施前进行测试。)
如果表是堆(没有聚簇索引),或者对于聚簇键与查询的所需访问顺序不匹配的聚簇表,则可能是这样。
另外,如果您考虑一下 - 每个(非群集)索引都会重复信息。它通常只是信息的一个子集而不是整个集合。