【问题标题】:Confusion: Why SSMS creates a default clustered index for a primary key with an identity困惑:为什么 SSMS 为具有标识的主键创建默认聚集索引
【发布时间】:2012-12-13 00:32:19
【问题描述】:

我刚刚执行了以下脚本

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

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

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

那么,使用非聚集密钥有什么好处?为什么在 SSMS 中是默认设置?

【问题讨论】:

  • 聚集索引你喜欢的二叉树...

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


【解决方案1】:

默认情况下,表的主键由聚集索引支持 - 这只是 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 就该主题所说的所有内容:

【讨论】:

    猜你喜欢
    • 2013-08-30
    • 1970-01-01
    • 2011-05-15
    • 2010-12-07
    • 1970-01-01
    • 2012-12-21
    • 2013-03-21
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多