【问题标题】:In SQL Server, should all bridge table fields have indexes on them?在 SQL Server 中,所有桥接表字段都应该有索引吗?
【发布时间】:2014-04-05 23:10:45
【问题描述】:

我读过all foreign keys should be indexed for better join performance。根据定义,这是否意味着所有桥接表都应为所有字段编制索引

例如,假设我有 3 张桌子

Project: Id, Name

ProjectApplication: Id, ProjectId, ApplicationId

Application: Id, Name

在这些情况下,ProjectId 和 ApplicationId 是否应该都有索引?

【问题讨论】:

  • 按照这个定义,答案显然是肯定的。但您不必在所有情况下都遵循该规则。

标签: sql sql-server indexing foreign-keys


【解决方案1】:

在您给定的示例中,Project 表中的 Id 列必须是主键(或至少 UNIQUE 约束)才能在任何其他列中引用它,即创建引用它的外键约束相同对于 Application 表中的 Id 列是正确的。因此,默认情况下,它将在其上定义一个聚集索引。

现在在您的ProjectApplication 表中,如果您确实创建外键并在该列上创建索引,显然,当您需要从这些表中检索信息时,您将在这两个字段中加入这些表,因此有一个一侧的聚集索引和另一侧的非聚集索引肯定会对您的查询性能产生很大影响,非常值得,去吧。

【讨论】:

  • 谢谢。 .“一侧的聚集索引和另一侧的非聚集索引”是什么意思?
  • 当您提供类似 ON A.ColumnPK = B.ColumnFK 的连接条件时,表 A 中的主键列默认会有一个集群索引。如果您在表 B 中的 ColumnFK 上创建非聚集索引。查询可以真正受益于表 A 中 columnPK 上的聚集索引和表 B 中 ColumnFK 上的非聚集索引。
猜你喜欢
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多