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上使用非聚集索引启动,并查看是否可以将性能提升到合理的水平.更多的东西可能只是在一个区域的交易速度,在另一个区域的缓慢.