SQL 服务器:唯一约束说明



有人可以简化向列添加唯一约束的解释吗?创建键索引时,SQL SERVER 是复制行中的所有信息并将其添加到索引中,还是仅使用应用了 UNIQUE 约束的列中的数据?

我希望我正确地解释了这一点。
任何帮助将不胜感激。
李。

编辑**

好的,我想我明白了?

CREATE TABLE dbo.test 
    (
    Id int NOT NULL, 
    Name char(10) NOT NULL UNIQUE
    );
INSERT INTO dbo.test (id, name) VALUES (1, 'Lee')
INSERT INTO dbo.test (id, name) VALUES (2, 'Paul')
INSERT INTO dbo.test (id, name) VALUES (3, 'Adam')
INSERT INTO dbo.test (id, name) VALUES (4, 'Henry')

在聚集索引中,整个表的排序方式如下

3, Adam
4, Henry
1, Lee
2, Paul

因此,对于每个额外的 INSERT,服务器必须根据名称列重新排序整个表?

在非聚集索引中,还有另一个"表"存储排序?

创建密钥索引时,SQL 服务器是否复制所有 行中的信息并将其添加到索引中,或仅添加到 列是否应用了唯一约束?

没有"关键指数"这样的术语。

索引可以是clustered的,也可以是non-clustered的。

当您声明UNIQUE CONSTRAINT它是逻辑实体时,但它由unique index创建物理支持

当您创建unique constraint将其声明为 clustered 时,将创建clustered index。如果在约束定义中未提及clustered或使用显式nonclustered,则将创建非聚集索引。

Non-clustered索引是一个单独的数据结构,其中每一行都包含键列。

另一方面,clustered index(或更好地称之为clustered table)是数据本身+在其上方搜索B树。在这种情况下,不会创建单独的结构,而是表本身,现在不是组织为堆,而是组织为有序索引。

UNIQUE CONSTRAINT将同样UNIQUE INDEX工作。有两种方法:

  • 使用 clustered index行按与索引相同的顺序以物理方式存储在磁盘上。(因此,只能有一个聚集索引)

  • 对于non clustered index,还有第二个列表,其中包含指向物理行的指针。您可以有许多非聚集索引,尽管每个新索引都会增加写入新记录所需的时间。

  • 如果同时具有聚集索引和非聚集索引,则非聚集索引将指向聚集索引列。

这个"所以"答案将帮助您清楚地理解它。

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

最新更新