FK上的连接比没有FK的连接更快吗?

Bri*_*ett 7 performance join sql-server-2005 foreign-key-relationship relationship

说我有两张桌子,a并且b:

a {
 pk as int
 fk as int
 ...
}

b {
 pk as int
 ...
}
Run Code Online (Sandbox Code Playgroud)

我想在这样的查询中加入a和b:

FROM a
JOIN b on a.fk = b.pk
Run Code Online (Sandbox Code Playgroud)

以下哪种情况会更快?

  1. a.fk被设置为外键b.pk- b.pk被索引
  2. a.fk被设置为外键b.pk- b.pk未编入索引
  3. 表之间没有关系 - b.pk被索引
  4. 表之间没有关系 - b.pk没有索引

奖金问题 - 每种情况会更快/更慢?

如果你能用引用来备份你的答案,那就太棒了.谢谢!

Lie*_*ers 5

最佳实践

  1. 外键是关系完整性工具,而不是性能工具.您应该始终在FK列上创建索引以减少查找.SQL Server不会自动执行此操作.
  2. 如上所述,外键提升了性能

从逻辑上讲,这给出了以下排名表现

  1. a.fk被设置为外键b.pk- b.pk被索引
  2. 表之间没有关系 - b.pk被索引
  3. a.fk被设置为b.pk上的外键 - b.pk未编入索引
  4. 表之间没有关系 - b.pk没有索引