SQL Server非聚集索引设计

And*_*son 6 database sql-server indexing sql-server-2005

此问题涉及在SQL Server 2005中设计非聚簇索引.

我有一张有数百万行的大桌子.只能读取或插入行.大多数操作都是读取.我一直在查看SELECT访问该表的各种查询,目的是提高读取访问速度.磁盘空间不是真正的问题.(每行都有一个唯一的ID,我将其用作聚集索引中的单个字段.)

我的问题是,如果非聚集索引索引的列数多于查询使用的列数,那么这会导致查询执行速度慢于与查询完全匹配的索引吗?

随着不同查询的数量增加,其WHERE子句中使用的列的排列数也会增加.我不确定在列表数量少(每个查询一个)的索引与更多列上的索引更少之间的权衡.

例如,假设我有两个SELECT查询.第一个在其WHERE子句中使用A,B,C和D列,第二个使用A,B,E和F.这里最好的做法是定义两个索引,一个在A/B/C/D上,其他在A/B/E/F; 或A/B/C/D/E/F的单一指数?

San*_*ram 3

First things first, the order of columns in the indexes matter. So building/tuning your queries accordingly will allow you to make good use of indexes you built.

单独使用两个索引还是使用一个索引取决于争用列的依赖性以及运行的查询类型。在您的示例中,如果 E 和 F 列与 C 和 D 列相关或依赖于 C 和 D 列,那么使用一个索引覆盖所有列是有意义的。

  • “如果您考虑一下以与上面相反的顺序使用 WHERE 将无法充分利用索引。” 这不是真的。您指定 WHERE 条件的顺序并不重要。 (2认同)