在非群集主键索引中包含其他列

Cla*_*ude 6 sql-server sql-server-2008

我已将表上的主键定义为nonclustered.对于由其显式创建的非聚集索引,create nonclustered index可以包含其他(非索引)列.隐式创建的主键非聚集索引也可以相同吗?

Ric*_*iwi 13

为INCLUDE列的语法仅适用于创建非聚集索引,特别是

INCLUDE(column [,... n])指定要添加到非聚簇索引的叶级别的非键列.非聚集索引可以是唯一的也可以是非唯一的.

它是否不适用于ADD CONSTRAINT,因此您不能包含具有主键的任何列,即使它是非群集的.

PRIMARY KEY可用作记录的UNIQUE标识符,并且是可用于REFERENTIAL约束的候选键.但是,出于性能原因,如果在另一列上有一个集群键,并且没有其他候选键可以作为PK进行升级,则可以始终在主键列和INCLUDE其他列上创建其他非聚集索引.进入指数.


Dan*_*man 6

尽管无法使用主键或唯一约束指定包含的列,但一种解决方法是使用相同的键和包含的列的唯一非聚集索引。这不仅提供与主键约束相同的唯一性保证,外键也可以引用唯一约束/索引键,提供与引用的主键相同的引用完整性。

此方法的优点是针对特殊用例的性能,例如当最佳聚集索引选择不是主键并且包含的​​列对于性能而言是理想的时。

缺点是只能指定带有主键约束的声明式级联 DRI,而且不直观。