为什么哈希匹配联接可能比 SQL 中的联接原始值更快?

Why hash match join may be faster than join raw values in SQL?

提问人:sebastian 提问时间:1/12/2023 更新时间:1/12/2023 访问量:163

问:

我不明白为什么在连接表时使用哈希函数转换输入可能比仅比较值而不进行哈希更快。

使用哈希匹配联接,SQL 必须读取联接列的所有行,并使用哈希函数创建相应的值。然后,它必须从第二个表中读取所有行,并再次对每个值使用哈希函数。使用哈希函数是一个额外的步骤,SQL 必须从第一个和第二个表中读取所有行,就像使用嵌套循环一样。

为什么哈希匹配可能更快?嵌套循环还必须从两个表中读取所有行,那么为什么在联接列上使用哈希函数可能会更好呢?这是一个额外的步骤,我们不能只比较值而不进行哈希处理吗?

我试图理解为什么它可以更快,但我遇到的每个教程都没有真正解释为什么对连接值进行哈希处理,然后在 bin 中比较它们可能比在 bin 中比较“原始”值更快。

SQL 循环 哈希 嵌套 匹配

评论

0赞 The Impaler 1/12/2023
当驱动表正在扫描堆的很大一部分,并且无法通过廉价的索引查找或最小索引扫描来访问非驱动表时,对非驱动表进行哈希处理可以证明比嵌套循环、合并或之字形更快。如果查询只读取几行,则哈希的成本可能过高;但是,如果查询读取表的重要部分,则哈希的成本可以被以后节省的成本所抵消。

答: 暂无答案