我是 SQL Server 新手,在学习聚集索引时,我感到很困惑!
唯一键是聚集索引还是非聚集索引? unique key只保存列中唯一的值,包括null,所以根据这个概念,unique key应该是聚集索引,对吗?但当我读完这篇文章时,我感到困惑MSDN
When you create a UNIQUE constraint, a unique nonclustered index is created to enforce a UNIQUE constraint by default. You can specify a unique clustered index if a clustered index on the table does not already exist.
请帮助我更好地理解这个概念,谢谢。
最佳答案
可以通过三种方法来强制 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;
对于未指定为唯一的索引,SQL Server 将以任何方式默默地使其唯一。对于聚集索引,这是通过将唯一符附加到重复键来完成的。对于非聚集索引,行标识符(逻辑或物理)被添加到键中以保证唯一性。
关于sql-server - SQL Server中唯一键是聚集索引还是非聚集索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39318547/