这适用于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])
该索引不应该覆盖调谐器推荐的查询吗?当我有像第一种情况一样的索引时,是否有必要在任何情况下创建第二个索引?
答案 0 :(得分:0)
您包含的列越多,索引的叶级所需的空间越多(页面越多)。索引越大,它在内存和光盘(以及备份)上所需的空间就越大。因此,与较小的索引相比,SQL-Server可能必须处理更多页面才能返回查询结果。
首先,您应该检查,如果您确实需要索引中的所有这些列。
如果某些查询确实需要INCLUDE-List中的所有列,而其他查询只需要其中一些列,则应测试是否有更小的索引可以提供更好的SELECT性能。但是更多的索引会减少INSERT,UPDATE和DELETE-Performance。
如果没有性能问题,我不会添加一个包含更少列的额外索引。