在SQL Server中,是否所有桥接表字段都有索引?

时间:2014-04-05 23:10:46

标签: sql sql-server indexing foreign-keys

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

例如,假设我有3个表

Project: Id, Name

ProjectApplication: Id, ProjectId, ApplicationId

Application: Id, Name

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

1 个答案:

答案 0 :(得分:1)

在您的给定示例中,Id表中的Project列必须是主键(或至少UNIQUE约束),以便能够在任何其他列中引用它,即创建外键约束对于Id表中的Application列,引用它的情况也是如此。因此,默认情况下,它将定义一个Clustered Index。

现在在ProjectApplication表中,如果你创建了一个外键并在该列上创建了一个索引,显然当你需要从这些表中检索信息时,你将在这两个字段上加入这些表,一方面具有聚簇索引,另一方面具有非聚簇索引,肯定会对查询的性能产生很大影响,值得一试。