非聚集索引包括提供更广泛查询的参数

时间:2016-03-18 14:23:08

标签: sql-server sql-server-2012

这适用于SQL Server 2012。

创建后

create nonclustered index [myindex_includes] 
on dbo.sampletable([personid] asc)
Include ([Q1], [Q2], [Q3], [Q4], [Q5], [Q6], [Q7], [Q8], [Q9], [Q10], [Q11],[Q12])

我运行SQL Server探查器并建议告诉我创建另一个索引,include中的列数较少,即

nonclustered index on personid 
include ([Q1], [Q4], [Q6], [Q9], [Q10])

该索引不应该覆盖调谐器推荐的查询吗?当我有像第一种情况一样的索引时,是否有必要在任何情况下创建第二个索引?

1 个答案:

答案 0 :(得分:0)

您包含的列越多,索引的叶级所需的空间越多(页面越多)。索引越大,它在内存和光盘(以及备份)上所需的空间就越大。因此,与较小的索引相比,SQL-Server可能必须处理更多页面才能返回查询结果。

首先,您应该检查,如果您确实需要索引中的所有这些列。

如果某些查询确实需要INCLUDE-List中的所有列,而其他查询只需要其中一些列,则应测试是否有更小的索引可以提供更好的SELECT性能。但是更多的索引会减少INSERT,UPDATE和DELETE-Performance。

如果没有性能问题,我不会添加一个包含更少列的额外索引。