SQL Server 中的唯一键是集群索引还是非集群索引?

24 浏览
0 Comments

SQL Server 中的唯一键是集群索引还是非集群索引?

我是SQL Server的新手,学习关于聚集索引时感到困惑!

唯一键是聚集索引还是非聚集索引?唯一键仅在列中包括空值时保留唯一值,因此根据此概念,唯一键应该是一个聚集索引,对吗?但是当我阅读这篇文章时感到困惑MSDN

当您创建唯一约束时,默认会创建一个唯一的非聚集索引以通过默认方式强制执行唯一约束。如果表上不存在聚集索引,则可以指定一个唯一的聚集索引。

请帮助我更好地理解这个概念,谢谢。

admin 更改状态以发布 2023年5月22日
0
0 Comments

唯一索引可以是聚集的或非聚集的。
但如果您有可空列,则 NULL 值应该是唯一的(只有 1 行列为空)。
如果您想存储多个空值,可以使用筛选器“where columnName is not null”创建索引。

0
0 Comments

在SQL Server索引中实现唯一性有三种方法:

  • 主键约束
  • 唯一约束
  • 唯一索引(非约束性)

无论它们是聚集索引还是非聚集索引,都与使用这些方法声明索引是否唯一无关。

这三种方法都可以创建聚集或非聚集索引。

默认情况下,如果您没有指定不同的选项,则唯一约束和唯一索引将创建一个非聚集索引(如果没有任何冲突的聚集索引存在,PK将默认为创建为聚集)。但是,您可以明确指定任何一个为聚集/非聚集

示例语法为

CREATE TABLE T
(
X INT NOT NULL,
Y INT NOT NULL,
Z INT NOT NULL
);
ALTER TABLE T ADD PRIMARY KEY NONCLUSTERED(X);
--Unique constraint NONCLUSTERED would be the default anyway
ALTER TABLE T ADD UNIQUE NONCLUSTERED(Y); 
CREATE UNIQUE CLUSTERED INDEX ix ON T(Z);
DROP TABLE T;

对于未指定为唯一的索引,SQL Server会悄悄地将它们变为唯一的索引。对于聚集索引,这是通过在重复键后追加唯一标识符来完成的。对于非聚集索引,行标识符(逻辑或物理)添加到键中以保证唯一性。

0