【发布时间】:2013-03-27 15:25:13
【问题描述】:
我已将表上的主键定义为nonclustered。对于由create nonclustered index 显式创建的非聚集索引,可以包含其他(非索引)列。隐式创建的主键非聚集索引也可以吗?
【问题讨论】:
标签: sql-server sql-server-2008
我已将表上的主键定义为nonclustered。对于由create nonclustered index 显式创建的非聚集索引,可以包含其他(非索引)列。隐式创建的主键非聚集索引也可以吗?
【问题讨论】:
标签: sql-server sql-server-2008
INCLUDE 列的语法仅适用于CREATE NONCLUSTERED INDEX,特别是
INCLUDE (column [ ,... n ] ) 指定要添加的非键列 到非聚集索引的叶级。非聚集索引 可以是唯一的或非唯一的。
它是否不适用于 ADD CONSTRAINT,因此您不能包含任何具有主键的列,即使它是非集群的。
PRIMARY KEY 可用作记录的唯一标识符,并且是可用于 REFERENTIAL 约束的候选键。但是,出于性能原因,如果您在另一列上有一个聚类键,并且没有其他候选键可作为 PK 提升,您始终可以创建一个 additional 非主键列上的聚集索引,并在索引中包含其他列。
【讨论】:
虽然无法使用主键或唯一约束指定包含列,但一种解决方法是使用具有相同键的唯一非聚集索引以及包含列。这不仅提供与主键约束相同的唯一性保证,外键也可以reference a unique constraint/index key,提供与被引用主键相同的引用完整性。
这种方法的优势在于特殊用例的性能,例如当最佳聚集索引选择不是主键并且包含列对性能而言是可取的。
缺点是只能指定带有主键约束的声明性级联 DRI,而且不直观。
【讨论】: