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

Lij*_*raj 4 sql-server unique-key clustered-index

我是SQL Server的新手,在学习聚簇索引时,我很困惑!

唯一键是聚簇索引还是非聚簇索引?唯一键仅在包含null的列中保存唯一值,因此根据此概念,唯一键应为聚簇索引,对吗?但是当我浏览本文时,我对MSDN感到困惑

创建UNIQUE约束时,默认情况下会创建一个唯一的非聚集索引来强制执行UNIQUE约束。如果表上的聚簇索引尚不存在,则可以指定唯一的聚簇索引。

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

Mar*_*ith 5

有三种方法可以在SQL Server索引中强制唯一性。

  • 主键约束
  • 唯一约束
  • 唯一索引(不基于约束)

它们是群集的还是非群集的,与使用这些方法中的任何一种将索引声明为唯一索引正交。

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

默认情况下,如果您不指定其他任何值(唯一的约束和唯一索引)将创建一个非聚集索引(默认情况下将创建PK,CLUSTERED就像不存在冲突的聚集索引一样),但是您可以为它们中的任何一个显式指定CLUSTERED/ NONCLUSTERED

示例语法是

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;
Run Code Online (Sandbox Code Playgroud)

对于未指定为唯一SQL Server的索引,它将以任何方式静默地使其唯一。对于聚簇索引,这是通过将唯一标识符附加到重复键来完成的。对于非聚集索引,将行标识符(逻辑或物理)添加到键中以确保唯一性。