我已将表中的主键定义为nonclustered
。对于由create nonclustered index
显式创建的非聚簇索引,可以包含其他(非索引)列。隐式创建的主键非聚集索引也可以相同吗?
答案 0 :(得分:12)
INCLUDE列的语法仅适用于CREATE NONCLUSTERED INDEX,特别是
INCLUDE(column [,... n])指定要添加的非键列 到非聚集索引的叶级别。非聚集索引 可以是唯一的也可以是非唯一的。
它是否不适用于ADD CONSTRAINT,因此您不能包含任何具有主键的列,即使它是非群集的。
PRIMARY KEY可用作记录的UNIQUE标识符,并且是可用于REFERENTIAL约束的候选键。但是,出于性能原因,如果您在另一列上有一个群集键,而您没有其他候选键可以作为PK进行推广,那么您始终可以创建 其他 非主键列上的聚簇索引和索引上的其他列的INCLUDE。
答案 1 :(得分:2)
虽然不能使用主键或唯一约束指定包含列,但解决方法是使用相同键和包含列的唯一非聚集索引。这不仅提供与主键约束相同的唯一性保证,外键也可以reference a unique constraint/index key,提供与被引用主键相同的参照完整性。
这种方法的好处是在特殊用例中的性能,例如当最好的聚集索引选择不是主键并且包含的列对于性能是可取的时。
缺点是只能指定具有主键约束的声明性级联 DRI,而且不直观。