【问题标题】:Index on foreign key or not in SQL Server 2008SQL Server 2008 中的外键索引与否
【发布时间】:2011-10-02 18:48:00
【问题描述】:

是否需要在 SQL Server 2008 中为外键添加索引,或者这是默认处理的。在我的许多表中,我都有一个指向用户帐户表的 FK,并且大多数选择都是通过 WHERE Account_FK = id 进行的。所以我希望索引在这里可以快速获得性能胜利。

【问题讨论】:

    标签: sql-server performance indexing foreign-keys


    【解决方案1】:

    通常,您希望所有 JOIN 键上都有索引,所以可以添加索引。

    如果是复合键,请确保将所有相关字段按适当的顺序放入索引键列表中。

    据我所知,在 SQL Server 中自动创建索引的唯一情况是您将主键添加到堆(非索引表)时 - PK 被自动分配为聚集索引键;或者,正如 Damien 在下面指出的那样,当您向一个字段或一组字段添加 UNIQUE 约束时。

    【讨论】:

    • PRIMARY KEY 和 UNIQUE 约束都会自动添加一个索引(与约束同名 - 它是如何实现的),这可以是集群的或非集群的(正如你所说, 如果是 PK 约束并且还没有聚集索引,则默认创建聚集索引。
    【解决方案2】:

    向 FK 添加索引的一个不太明显的原因是当您想要删除主表(您的用户帐户表)中的一行时。 SQL Server 会检查每个 FK 关系以查看是否有任何行会阻止删除,并且使用子表中 FK 列上的索引进行检查会更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 2014-12-25
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      相关资源
      最近更新 更多