【问题标题】:primary key is always indexed in sql server?主键总是在 sql server 中被索引?
【发布时间】:2012-05-26 08:59:18
【问题描述】:

如果指定了非聚集主键约束,您可以在主键列以外的列上创建聚集索引。 http://msdn.microsoft.com/en-us/library/ms186342.aspx

所以上面告诉我:我可以在主键以外的列上创建聚集索引。

我认为它还传达了主键应该是非聚集主键或聚集键。是否有可能没有索引主键?

还有:

当您创建一个 UNIQUE 约束时,默认情况下会创建一个唯一的非聚集索引来强制执行一个 UNIQUE 约束。如果表上的聚集索引尚不存在,您可以指定唯一聚集索引。

这是否意味着唯一约束必须创建聚集索引或非聚集索引?

【问题讨论】:

    标签: sql-server indexing primary-key clustered-index non-clustered-index


    【解决方案1】:

    简短回答:不,

    SQL Server 中的每个表都应该只有一个聚集索引。其他索引(非聚集)使用聚集索引。主键通常是聚集索引。但与外键不同,主键总是被索引。

    http://www.sqlfiddle.com/#!6/972f0/1
    

    【讨论】:

    • 每张表...应该只有一个聚集索引 - 每张表绝不可以有多个聚集索引!这不是一个不应该限制——它是一个固定的CANNOT限制。没有办法拥有多个聚集索引。
    【解决方案2】:

    是否有可能没有索引主键?

    不,不是。

    需要某种索引来监管PRIMARY KEY,否则需要在每次插入时扫描整个表(以确保唯一性)。

    来自docs

    数据库引擎自动创建唯一索引以强制执行 PRIMARY KEY 约束的唯一性要求。如果表中不存在聚集索引或未显式指定非聚集索引,则会创建唯一的聚集索引以强制执行PRIMARY KEY 约束。


    这是否意味着唯一约束必须创建聚集索引或非聚集索引?

    是的,出于同样的原因。


    PRIMARY KEYUNIQUE 是逻辑概念,而索引只是具有高效实现它们的副作用。所以,严格来说,ALTER TABLE ADD CONSTRAINT UNIQUECREATE UNIQUE INDEX 意味着不同的东西。

    如果将来某个聪明人发明了一种方法来使用泡利原理或量子纠缠或其他任何方法在物理层面上强制唯一性,SQL Server 2155 可能会使用它来强制执行约束,但它仍然必须创建索引的 B-Tree。

    【讨论】:

    • 我认为根据问题标题,答案可能会产生误导。答案是肯定的,pk 总是被索引的。
    猜你喜欢
    • 2011-04-20
    • 2012-03-21
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2017-05-20
    相关资源
    最近更新 更多