我已将表上的主键定义为nonclustered
. 对于显式创建的非聚集索引,create nonclustered index
可以包含其他(非索引)列。隐式创建的主键非聚集索引也可以吗?
问问题
14000 次
2 回答
16
INCLUDE 列的语法仅适用于CREATE NONCLUSTERED INDEX,特别是
INCLUDE (column [ ,... n ] ) 指定要添加到非聚集索引的叶级别的非键列。非聚集索引可以是唯一的或非唯一的。
它是否不适用于 ADD CONSTRAINT,因此即使它是非集群的,也不能包含任何具有主键的列。
PRIMARY KEY 可用作记录的唯一标识符,并且是可用于 REFERENTIAL 约束的候选键。但是,出于性能原因,如果您在另一列上有一个聚集键,并且没有其他候选键可提升为 PK,您始终可以在主键列上创建一个额外的非聚集索引并包含其他列上索引。
于 2013-04-05T09:30:45.687 回答
2
尽管无法使用主键或唯一约束指定包含的列,但一种解决方法是使用具有相同键的唯一非聚集索引以及包含的列。这不仅提供与主键约束相同的唯一性保证,外键也可以引用唯一约束/索引键,提供与被引用主键相同的引用完整性。
这种方法的好处是特殊用例的性能,例如当最佳聚集索引选择不是主键并且包含列对于性能来说是可取的。
缺点是只能指定具有主键约束的声明性级联 DRI,而且不直观。
于 2021-02-27T13:26:09.857 回答