【问题标题】:Database clustered Index on referring column引用列上的数据库聚集索引
【发布时间】:2010-11-17 15:55:38
【问题描述】:

我有两张这样的桌子。

表 A

A_ID(主键)
A1
A2

表 B

B_ID(主键)
B1
B2 A_ID(外键但未在数据库中强制执行,不是唯一的)

虽然默认情况下 SQL 服务器在 B_ID 上创建聚集索引,但我在 B 上有很多选择查询,这些查询依赖于 A_ID

类似的东西

SELECT * FROM B WHERE B.A_ID = 'SOME ID'

我应该在表 B 的 A_ID 上创建聚集索引吗?

【问题讨论】:

    标签: database indexing


    【解决方案1】:

    没有常规的非聚集索引应该可以正常工作。在进行范围查询(BETWEEN)时,聚集索引特别方便根据经验,我总是在外键约束中使用的列上创建非聚集索引。

    【讨论】:

    • +1 好推荐! (外键列的索引)——这不是自动完成的,这与很多人的看法相反
    【解决方案2】:

    不,只需创建一个普通的非聚集索引 - 您将获得基本相同的结果和相同的查询速度改进。

    表 B 上的 A_ID 是否可以保证是唯一的? “B”中不能有超过 1 个条目引用相同的 A_ID 吗??

    集群键的最佳实践是:

    • 尽可能小(窄)
    • 独一无二的
    • 稳定(或静态 - 永远不会改变)
    • 不断增加

    请参阅 Kim Tripp 的 The Clustered Index Debate continuesEver-increasing clustering key - the Clustered Index Debate - agin! 了解更多信息。

    如果不能保证您的集群键是唯一的,SQL Server 将为其添加一个 4 字节的唯一标识符 - 您将希望尽可能避免这种情况(因为您的集群键将添加到每个条目的每个条目中表上的非聚集索引,如果太宽会导致空间浪费)。

    马克

    【讨论】:

      猜你喜欢
      • 2011-02-19
      • 2012-08-26
      • 1970-01-01
      • 2015-04-16
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 2020-08-04
      相关资源
      最近更新 更多