1

我刚刚执行了以下脚本

CREATE TABLE Test
(
    ID INT IDENTITY PRIMARY KEY,
    Info nvarchar(50)
)

令我惊讶的是,SSMS 为 ID 列创建了一个聚集索引。所以,我的问题是为什么不是非聚集索引?

根据我的理解,在这种情况下使用非聚集索引会更好,因为由于二叉树,查找具有 X 值的 ID 而不是使用值的聚集索引要快得多以某种方式分组。此外,如果我考虑接收数据,则必须以某种方式快速访问 ID。正如在许多文章中所写的那样,二叉树是接收特定或多个 ID 的最快方式。除此之外,在大多数情况下,我看到任何表的主键都是具有自动递增值的 ID。因此,使用这种自增原理的方法是很常见的。

那么,使用非聚集密钥有什么优势,为什么 SSMS 中默认使用此密钥?

4

1 回答 1

3

默认情况下,表的主键由聚集索引支持——这只是 SQL Server 的默认行为。如果需要,它可以更改:

CREATE TABLE Test
(
    ID INT IDENTITY PRIMARY KEY NONCLUSTERED,
    Info nvarchar(50)
)

但尤其是在这种INT IDENTITY情况下,这几乎是您可以在表上想象的完美聚集索引 - 所以 SQL Server 做出这个默认选择是一件“好事”。

SQL Server 中的每个“严肃”表都应该有一个精心挑选的聚集索引(因为替代方案 -- 在各个方面进行微调更慢且更麻烦) - 以及一个小的(4 字节)静态(从不改变),唯一列 likeINT IDENTITY非常适合作为此表上的聚集索引。

如果您想了解更多关于如何明智地选择集群键以及为什么这样做如此重要的信息,您应该查看 Kimberly Tripp 就该主题所说的所有内容:

于 2012-12-27T16:46:21.927 回答