索引SQL Server组合键的各个字段

Dav*_*ton 8 sql-server indexing composite-key

我正在将Jet数据库升级到SQL Server Express 2008 R2,在此之前,我正在重新评估架构(它是在1997-98设计的,设计它的人(即我)是一个白痴!).

我的问题是关于N:N连接表与两列复合键.在Jet中,两列复合键的第一列上的连接将使用复合索引,但第二列上的连接不会,因此通常在具有大N:N连接表的Jet数据库中具有相当大的记录数,除了复合索引,我在第二列上添加了第二个非唯一索引.

这在SQL Server中是个好主意吗?

(也许这在Jet中不是一个好主意?)

Joe*_*lli 15

相同的规则适用于SQL Server.如果在(ColumnA,ColumnB)上有索引,则只有ColumnA或ColumnA和ColumnB的查询可以一起使用索引,但只有ColumnB的查询不能.如果只需要加入ColumnB,那么你一定要创建索引.

  • 存储索引的空间注意事项.插入/更新/删除操作的额外开销.还要考虑ColumnB的基数.如果它的基数较低(很少有唯一值),那么索引可能没那么多. (2认同)

Rem*_*anu 5

如果列上有复合索引,则(A,B)搜索,范围扫描,排序或聚合操作可以将其用于 包含的表达式B.这对于SQL Server来说是正确的,就像Jet(红色)驱动程序一样(我认为也适用于Jet Blue).其他一些引擎可能会在所谓的skip scan操作中使用它.

所以答案是单独需要单独的索引(B).