2

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

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

4

3 回答 3

3

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

所以我们可以(理论上)在没有索引的情况下使用任何约束 - 按性能价格计算。

有时它很有用。在非常非常罕见和特定的情况下。

于 2013-07-14T23:38:42.950 回答
3

这取决于用例。

  • 索引成本- 构建的空间和时间 - 这可能会影响插入/更新速度。在您的用例中,您可能无法负担得起。

  • 没有使用太多- 您的表可能有其他列用作连接、查找等的键,因此主键可能只是用于一致性的人工键。

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

虽然我必须同意你的观点,但我怀疑现在这种情况已经很少见了。

于 2013-07-14T23:45:17.373 回答
2

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

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

如果您有一个导致大量行拆分的非键,您可能不想使用集群 PK。

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

于 2013-07-15T00:58:40.017 回答