聚簇索引是否比包含?的非聚集索引更快?

Mar*_*lec 8 sql sql-server sql-server-2008

我有一个表a列,a,b,c,d,e,f,g,大约有500,000行.

有一个经常运行的查询SELECT * FROM table WHERE a = @a AND b = @b AND c = @c.

是否更好的创建a clustered index,b和c,或者我最好创建non-clustered indexa,b和c INCLUDE (d, e, f, g).

自发出select*以来,不确定include会帮助加快查询速度.

任何帮助,将不胜感激!

D S*_*ley 13

聚集索引是最快SELECT,但它可能不一定是正确的选择.

聚簇索引确定记录的物理存储顺序(这就是为什么每个表只能有一个).因此,虽然它对于THAT查询来说是最快的,但它可能会减慢其他查询的速度,并且如果其中一个列发生更改,则可能会更新和插入Kill,这可能意味着需要在物理上重新定位记录.

如果更新了任何这些字段(包括包含的字段),则INCLUDE将以额外存储和额外索引维护为代价再次加速该查询.

我将在a,b和c上使用非聚集索引启动,并查看是否可以将性能提升到合理的水平.更多的东西可能只是在一个区域的交易速度,在另一个区域的缓慢.

  • 好问题。很好的答案。 (2认同)