做了一些缺失的索引'通过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
上创建单个索引,包括ColumnB
和ColumnC
,或者更好两个在{{1}上有单独的索引},一个包含ColumnA
,另一个包含ColumnB
?
(使用SQLServer 2008 RC2)
答案 0 :(得分:2)
我认为最好有一个索引:(ColumnA INCLUDE (ColumnB, ColumnC))
。
具有相同排序键的两个索引具有相同的顺序是多余的。可以使用索引中包含的其他列,而不管它们出现的顺序如何。拥有第二个索引来包含它们只会增加开销,因为需要维护两个索引。
答案 1 :(得分:2)
可以在ColumnA上创建单个索引,包括ColumnB和> ColumnC
我会选择这个选项
最好两个在ColumnA上有单独的索引,一个包含ColumnB,另一个包含ColumnC?
使用此选项创建索引只是浪费空间和不必要的开销,因为这些列在包含列表中而不在键列列表中