混淆:为什么SSMS为具有标识的主键创建默认聚簇索引

时间:2012-12-27 16:17:35

标签: sql-server database-design indexing ssms-2012

我刚刚执行了以下脚本

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

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

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

那么,使用非群集密钥的优势是什么?为什么这在SSMS中是默认的?

1 个答案:

答案 0 :(得分:3)

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

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

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

SQL Server中的每个“严肃”表都应该有一个精心选择的聚簇索引(因为替代方案 - - 在各个方面调整速度更慢且更麻烦) - 和小(4字节),静态(永不改变),像INT IDENTITY这样的唯一列非常适合作为此表的聚簇索引。

如果您想更多地了解如何明智地选择群集密钥,以及为什么这么做非常重要,您应该查看Kimberly Tripp就该主题所说的一切: