哈希,合并和循环联接之间的区别?


40

在SQL Server中,您可以指定连接提示:

  • 哈希联接
  • 合并加盟
  • 循环加入

这三个连接提示的定义是什么,什么时候应使用?

Answers:


37

在MSDN中,主题为“ 高级查询调整概念”

SQL Server使用三种类型的联接操作:

  • 嵌套循环联接

  • 合并加入

  • 哈希加入

如果一个联接输入很小(少于10行),而另一个联接输入相当大并且在其联接列上建立了索引,则索引嵌套循环联接是最快的联接操作,因为它们需要最少的I / O和最少的比较。有关嵌套循环的更多信息,请参见了解嵌套循环联接。

如果两个联接输入不小但在它们的联接列上排序(例如,如果它们是通过扫描排序的索引获得的),则合并联接是最快的联接操作。如果两个联接输入都很大且两个输入的大小相似,则具有先后排序的合并联接和哈希联接可提供类似的性能。但是,如果两个输入大小互不相同,则哈希联接操作通常会快得多。有关更多信息,请参见了解合并联接。

哈希联接可以有效地处理大型的,未排序的,未索引的输入。

但我认为您应该从一个更基本的主题开始:查询优化,最后转到使用查询提示。


5
同意,仅在万不得已时才加入连接提示(如果估算的数据与实际数据明显不同,有时很有用)。
安德鲁·比克顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.