SQL-执行计划-为什么将哈希匹配用于JOIN操作?

时间:2018-12-27 12:35:32

标签: sql sql-server hash inner-join sql-execution-plan

快速提问-为什么以下查询使用哈希匹配?

BusinessentityID的类型为Int,目前我还不能真正解释为什么他们需要使用散列吗?

使用像数据结构这样的琐碎数组合并是否会更快?

尽管我猜想在连接子句中使用其他数据类型(例如GUID)的情况下会有意义吗?

enter image description here

1 个答案:

答案 0 :(得分:3)

通常,最快的1,2,3类型将使用索引。因此,如果您关心性能,请在join上添加索引。

已对数据进行排序时使用合并联接。如果未排序,则排序相当昂贵-O(n log(n))。

相比之下,

散列连接需要“仅”散列值并将它们在bin中进行比较。在许多情况下,这是O(n)。当然,如果您的数据确实很大,或者某些值重复很多次,则哈希联接将出现内存问题或哈希冲突-并且算法的复杂性会增加。

但是,关键是优化器选择了它认为最适合数据的算法。如果您将性能作为主要考虑因素,那么强烈建议您使用索引。