相同的索引仅在包含的列上不同?
Same Index That Differs Only On INCLUDE-d Colums?
我正在尝试优化一些数据库性能,我使用了 SSMS 中的估计执行计划选项让它为我推荐一些索引。在几百行代码中,它返回了这样的建议:
索引 1
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[TABLE_NAME] ([ColA])
INCLUDE ([ColB],[ColC])
索引 2
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[TABLE_NAME] ([ColA])
INCLUDE ([ColB],[ColC],[ColD])
索引 3
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[TABLE_NAME] ([ColA])
INCLUDE ([ColC],[ColD],[ColE])
我对 SQL 中的 INCLUDE 语句了解了一点,但我想不通的是索引是否仅在您的 SELECT 语句包含 时才有用所有 INCLUDE 中的字段。
例如,如果我只创建一个这样的索引:
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[TABLE_NAME] ([ColA])
INCLUDE ([ColB],[ColC],[ColD],[ColE])
这是否涵盖了 SSMS 的索引 1、2 和 3 涵盖的所有场景,因为它们都是 select 这些列的某个子集?还是因为 none 其中 select 列 B-E 是无用的?
就其价值而言,table 中有 36 个字段,因此该索引不会包含所有记录。
感谢任何assistance/suggestions。
是的,当然,假设分析的所有查询对于优化都同样重要,那么创建一个索引并结合所有建议作为包含列的列将是一个很好的经验法则。
我正在尝试优化一些数据库性能,我使用了 SSMS 中的估计执行计划选项让它为我推荐一些索引。在几百行代码中,它返回了这样的建议:
索引 1
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[TABLE_NAME] ([ColA])
INCLUDE ([ColB],[ColC])
索引 2
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[TABLE_NAME] ([ColA])
INCLUDE ([ColB],[ColC],[ColD])
索引 3
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[TABLE_NAME] ([ColA])
INCLUDE ([ColC],[ColD],[ColE])
我对 SQL 中的 INCLUDE 语句了解了一点,但我想不通的是索引是否仅在您的 SELECT 语句包含 时才有用所有 INCLUDE 中的字段。
例如,如果我只创建一个这样的索引:
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[TABLE_NAME] ([ColA])
INCLUDE ([ColB],[ColC],[ColD],[ColE])
这是否涵盖了 SSMS 的索引 1、2 和 3 涵盖的所有场景,因为它们都是 select 这些列的某个子集?还是因为 none 其中 select 列 B-E 是无用的?
就其价值而言,table 中有 36 个字段,因此该索引不会包含所有记录。
感谢任何assistance/suggestions。
是的,当然,假设分析的所有查询对于优化都同样重要,那么创建一个索引并结合所有建议作为包含列的列将是一个很好的经验法则。