Sql server 如果列不为NULL,则可能会发生性能更改唯一聚集索引将是主键

Sql server 如果列不为NULL,则可能会发生性能更改唯一聚集索引将是主键,sql-server,database-indexes,Sql Server,Database Indexes,如果列被声明为非空唯一聚集索引,使其成为主键会对性能或其他方面产生任何实际变化吗?它不应该有任何影响。在几个handwave1中,主键与唯一键相同,附加条件是所有列都必须非空。因此,将此列装饰为主键不应导致实现该表的物理数据结构2发生任何更改 集群是一个完全独立的概念-有时与主键合并。如果表没有聚集索引,并且添加了主键,则默认情况下,该主键也将被定义为聚集索引。但如果需要的话,这种行为可以被覆盖,而实际上这两者并没有联系在一起 1在这一点上,我实际上想不出任何相关的差异,但这只是为了避免吹毛求

如果列被声明为
非空唯一聚集索引
,使其成为
主键
会对性能或其他方面产生任何实际变化吗?

它不应该有任何影响。在几个handwave1中,
主键
唯一键
相同,附加条件是所有列都必须非空。因此,将此列装饰为主键不应导致实现该表的物理数据结构2发生任何更改

集群
是一个完全独立的概念-有时与
主键
合并。如果表没有
聚集索引
,并且添加了
主键
,则默认情况下,该主键也将被定义为
聚集索引
。但如果需要的话,这种行为可以被覆盖,而实际上这两者并没有联系在一起


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


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

它不应产生任何影响。在几个handwave1中,
主键
唯一键
相同,附加条件是所有列都必须非空。因此,将此列装饰为主键不应导致实现该表的物理数据结构2发生任何更改

集群
是一个完全独立的概念-有时与
主键
合并。如果表没有
聚集索引
,并且添加了
主键
,则默认情况下,该主键也将被定义为
聚集索引
。但如果需要的话,这种行为可以被覆盖,而实际上这两者并没有联系在一起


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


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

主键
不允许空值,并且必须是唯一的,约束
不允许空值唯一
也可以像
主键
一样将类似规则应用到列中,但是,您的表只能有一个主键,但是可以有多个
非空的唯一列

通过
NOT NULL UNIQUE clustering INDEX
PRIMARY KEY
,两者都将像在聚集索引中一样存储、排序和结构化,因此在选择、插入、更新或删除的操作性能基础中,应该没有什么不同


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

主键
不允许空值,并且必须是唯一的,约束
非空值唯一的
也可以将与
主键
类似的规则应用到列中,但是,您的表只能有一个主键,但是可以有多个
非空的唯一列

通过
NOT NULL UNIQUE clustering INDEX
PRIMARY KEY
,两者都将像在聚集索引中一样存储、排序和结构化,因此在选择、插入、更新或删除的操作性能基础中,应该没有什么不同


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

事实上,标准SQL中的基本唯一性定义也强制不为NULL:如果指定了UNIQUE,则在一致性SQL语言中,如果没有特性T591,“可能为NULL的列的唯一约束”,则,则包含在中的每个列的值应包含NOTNULL。事实上,标准SQL中的基本唯一性定义也强制NOTNULL:如果指定了UNIQUE,则在一致性SQL语言中,如果没有特性T591,“可能为空列的唯一约束”,则,则包含在中的每个列的值应不包含NULL。