为什么要创建一个包含主键但没有和索引的表

时间:2013-07-14 23:26:25

标签: sql sql-server tsql indexing

当我第一次听到这个消息时,我真的不明白人们为什么要这样做。谁知道为什么以及如何?有没有其他数据库引擎允许它?原谅我的无知。

我正在使用SQL Server。在线书籍说,默认情况下,SQL服务器会在创建主键时强制执行聚簇索引。如果我们不喜欢它或其他原因,我们也可以为主键指定非聚集索引。根据我的知识,SQL服务器将根据不同的索引应用不同的算法。我的下一个疑问是为什么以及何时需要主键上的非聚集索引?

3 个答案:

答案 0 :(得分:3)

为什么不呢? PK是约束 - 逻辑实体,而索引是物理实体,仅用于加速查询,数据模型/逻辑不需要

所以我们可以(理论上)使用任何约束而不需要索引 - 按性能价格。

有时它很有用。非常非常罕见且具体的案例。

答案 1 :(得分:3)

这取决于用例。

  • 索引费用 - 构建的空间和时间 - 这可以达到插入/更新速度。在您的用例中,您可能无法承担这一责任。

  • 用得不多 - 您的表可能有其他列用作连接,查找等的键,因此主键可能只是一个人工密钥以保持一致性。

  • 其他列需要索引 - 例如上述两者的混合 - 您可以选择仅索引其他列。表中只有一个集群(数据的物理排序)和我需要的另一个索引。出于这个原因,我偶尔会将PK从群集更改为非群集。

虽然我必须同意你的观点,但我怀疑这些日子是罕见的。

答案 2 :(得分:2)

因为没有明确的理由将PK限制为聚簇索引。

非聚集索引没有不同的“算法” 聚簇索引仅仅是表的排序,因此它不是单独的物理索引。

如果您有非密钥导致大量行拆分,您可能不想使用群集PK。

考虑SQL 2014的内存优化表.PK是非群集哈希。