2012-12-27 40 views
1

我只是执行下面的脚本困惑:为什么SSMS创建一个主键的默认群集索引与

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

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

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

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

+4

聚簇索引**是**你所嚷嚷的二叉树... –

回答

3

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

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

,但尤其是在INT IDENTITY情况下,这几乎你能想象你的桌子上完美的聚集索引 - 所以这是一个“好东西”的SQL Server使这个默认选择。

SQL Server中的每个“严重”表都应该有一个精心挑选的聚簇索引(因为替代方案 - 堆更慢,更精细地调整每个方面) - 以及一个小的(4个字节),静态(永远不会更改),像INT IDENTITY这样的唯一列非常适合作为此表上的聚簇索引。

如果您想了解更多关于如何明智地选择聚集键,以及为什么它这样做是如此重要,你应该检查出的一切金佰利特里普必须在话题说:

相关问题