Andrew Bickerton Asked: 2011-01-28 01:04:53 +0800 CST2011-01-28 01:04:53 +0800 CST 2011-01-28 01:04:53 +0800 CST 哈希,合并和循环连接之间的区别? 772 在 SQL Server 中,您可以指定连接提示: 哈希连接 合并加入 循环连接 这三个连接提示的定义是什么,应该在什么时候使用它们? sql-server 2 个回答 Voted Best Answer Marian 2011-01-28T01:11:28+08:002011-01-28T01:11:28+08:00 来自 MSDN,在Advanced Query Tuning Concepts主题中: SQL Server 使用三种类型的连接操作: 嵌套循环连接 合并联接 哈希连接 如果一个连接输入很小(少于 10 行)而另一个连接输入相当大并且在其连接列上建立索引,则索引嵌套循环连接是最快的连接操作,因为它们需要最少的 I/O 和最少的比较。有关嵌套循环的更多信息,请参阅了解嵌套循环连接。 如果两个连接输入不小但按连接列排序(例如,如果它们是通过扫描排序索引获得的),则合并连接是最快的连接操作。如果两个连接输入都很大并且两个输入的大小相似,则具有先验排序的合并连接和散列连接提供相似的性能。但是,如果两个输入大小彼此显着不同,散列连接操作通常要快得多。有关详细信息,请参阅了解合并联接。 散列连接可以有效地处理大的、未排序的、非索引的输入。 但我认为您应该从一个更基本的主题开始:查询调优,最后再使用查询提示。 Maria Ines Parnisari 2020-04-27T14:15:37+08:002020-04-27T14:15:37+08:00 这篇文章解释得很好:https ://www.linkedin.com/pulse/loop-hash-merge-join-types-eitan-blumin (假设N和M是正在连接的两个表中的行数)。 嵌套循环连接 复杂度:O(NlogM) 通常在一张桌子非常小的时候使用 较大的表有一个索引,允许使用连接键查找它 合并加入 复杂度:O(N+M) 两个输入都按连接键排序 使用相等运算符 非常适合非常大的桌子 哈希连接 复杂性:O(N hc+M hm+J) 或 O(N+M) 如果忽略资源消耗成本 最后的加入类型 使用哈希表和动态哈希匹配函数来匹配行 内存消耗和磁盘 I/O 利用率方面的成本更高。
来自 MSDN,在Advanced Query Tuning Concepts主题中:
但我认为您应该从一个更基本的主题开始:查询调优,最后再使用查询提示。
这篇文章解释得很好:https ://www.linkedin.com/pulse/loop-hash-merge-join-types-eitan-blumin
(假设N和M是正在连接的两个表中的行数)。
嵌套循环连接
合并加入
哈希连接