我刚刚执行了以下脚本
CREATE TABLE Test
(
ID INT IDENTITY PRIMARY KEY,
Info nvarchar(50)
)
令我惊讶的是,SSMS为ID列创建了一个聚簇索引。所以,我的问题是为什么不是非聚集索引?
根据我的理解,在这种情况下使用非聚集索引必须更好,因为由于二叉树,使用X值而不是使用聚簇索引查找ID要快得多其中值以某种方式分组。此外,如果我考虑接收数据,必须以某种方式快速访问ID。正如在许多文章中所写的那样,二叉树是接收特定或多个ID的禁食方式。除此之外,在大多数情况下,我看到任何表的主键都是具有自动增量值的ID。因此,使用这种自动增量原理的方法是很常见的。
那么,使用非群集密钥的优势是什么?为什么这在SSMS中是默认的?
答案 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就该主题所说的一切: