我尝试优化某些数据库性能,并使用SSMS中的Estimated Execution Plan选项让它为我推荐一些索引。在几百行代码中,它返回了这样的建议:
索引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语句包含 all INCLUDE中的字段时才有用
例如,如果我只创建一个这样的索引:
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[TABLE_NAME] ([ColA])
INCLUDE ([ColB],[ColC],[ColD],[ColE])
是否会覆盖SSMS中索引1,2和3所涵盖的所有场景,因为它们都选择了这些列的某些子集?或者它没用,因为它们都没有选择B-E列?
对于它的价值,该表中有36个字段,所以它不像这个索引会包含每个记录。
感谢您的任何帮助/建议。
答案 0 :(得分:1)
是的,假设所有分析的查询对于优化同样重要,当然,创建一个带有所有建议列为包含列的列的并集的索引将是一个很好的经验法则。