我读过all foreign keys should be indexed for better join performance。这意味着,根据定义,所有桥接表都应该将所有字段编入索引
例如,假设我有3个表Project: Id, Name
ProjectApplication: Id, ProjectId, ApplicationId
Application: Id, Name
在这些情况下,ProjectId和ApplicationId是否都有索引?
答案 0 :(得分:1)
在您的给定示例中,Id
表中的Project
列必须是主键(或至少UNIQUE约束),以便能够在任何其他列中引用它,即创建外键约束对于Id
表中的Application
列,引用它的情况也是如此。因此,默认情况下,它将定义一个Clustered Index。
现在在ProjectApplication
表中,如果你创建了一个外键并在该列上创建了一个索引,显然当你需要从这些表中检索信息时,你将在这两个字段上加入这些表,一方面具有聚簇索引,另一方面具有非聚簇索引,肯定会对查询的性能产生很大影响,值得一试。