具有多个INCLUDE列的单个索引或具有单个INCLUDE的多个索引

时间:2016-09-12 11:08:56

标签: sql-server indexing

做了一些缺失的索引'通过DMV表进行分析(并感谢this guide),我发现我在一个表上有一些索引候选者。

输出查询类似于:

Total Cost  Table Name  equality_columns  inequality_columns  included_columns
1615619     [TableA]    [ColumnA]         NULL                [ColumnB]
1494475     [TableA]    [ColumnA]         NULL                [ColumnC]

*_columns列直接来自sys.dm_db_missing_index_groups

在这种情况下,可以在ColumnA上创建单个索引,包括ColumnBColumnC,或者更好两个在{{1}上有单独的索引},一个包含ColumnA,另一个包含ColumnB

(使用SQLServer 2008 RC2)

2 个答案:

答案 0 :(得分:2)

我认为最好有一个索引:(ColumnA INCLUDE (ColumnB, ColumnC))

具有相同排序键的两个索引具有相同的顺序是多余的。可以使用索引中包含的其他列,而不管它们出现的顺序如何。拥有第二个索引来包含它们只会增加开销,因为需要维护两个索引。

答案 1 :(得分:2)

  

可以在ColumnA上创建单个索引,包括ColumnB和> ColumnC

我会选择这个选项

  

最好两个在ColumnA上有单独的索引,一个包含ColumnB,另一个包含ColumnC?

使用此选项创建索引只是浪费空间和不必要的开销,因为这些列在包含列表中而不在键列列表中