如果列 NOT NULL UNIQUE CLUSTERED INDEX 将成为主键,则性能可能会发生变化

Possible performance change if column NOT NULL UNIQUE CLUSTERED INDEX will be Primary Key

如果将列声明为 NOT NULL UNIQUE CLUSTERED INDEX,是否会使它 PRIMARY KEY 对性能或其他方面有任何实际改变?

应该没有任何影响。在几个 handwaves1 内,PRIMARY KEYUNIQUE KEY 相同,附加条件是所有列都必须为非 NULL。因此,将此列装饰为 PRIMARY KEY 不应导致实现 table.

的物理数据结构 2 发生任何变化

CLUSTERED 是一个完全独立的概念——有时与 PRIMARY KEY 混为一谈。如果 table 没有 CLUSTERED INDEX 并且添加了 PRIMARY KEY,那么默认情况下,它也将被定义为 CLUSTERED INDEX。但如果需要,可以覆盖此行为,并且两者在实践中并没有捆绑在一起。


1此时我实际上想不出任何相关差异,但希望这只是为了避免吹毛求疵。

2聚簇索引和任何非聚簇索引和统计信息。

PRIMARY KEY 不允许为 null 并且必须是唯一的,约束 NOT NULL UNIQUE 也可以像 PRIMARY KEY 一样将类似的规则应用到列中,但是,您的 table 只能有一个主键,但可以有多个 NOT NULL UNIQUE 列。

以及 NOT NULL UNIQUE CLUSTERED INDEXPRIMARY KEY,两者都将像 CLUSTERED INDEX 中一样存储、排序和结构化,因此在操作性能基础上 select、插入、更新、 or delete,应该没有区别

唯一的区别可能在于元数据本身。