Hash Join 原理解析
什么是 Hash Join?
Hash Join 是关系型数据库中用于执行表连接(JOIN)操作的一种高效算法。
它特别适用于等值连接(例如 ON A.id = B.id)且其中一张表较小的场景。
与 Nested Loop Join 或 Merge Join 不同,Hash Join 利用哈希表(Hash Table)来加速匹配过程,
在大数据量下通常具有更优的性能表现。
Hash Join 的执行流程
- 构建阶段(Build Phase):选择较小的表(称为“构建表”),遍历其所有行,并根据连接键计算哈希值,将数据存入内存哈希表中。
- 探测阶段(Probe Phase):遍历较大的表(称为“探测表”),对每一行的连接键计算哈希值,在哈希表中查找匹配项,若找到则输出连接结果。
示意图:
构建表 (小表) → [哈希函数] → 内存哈希表
探测表 (大表) → [哈希函数] → 查找哈希表 → 输出匹配行
适用场景
- 连接条件为等值比较(如
=)
- 其中一张表明显小于另一张(可放入内存)
- 没有合适的索引支持 Nested Loop Join
- 需要一次性处理大量数据(如数据仓库场景)
优缺点分析
优点:
- 时间复杂度接近 O(M + N),效率高
- 对无序数据友好,无需预排序
- 适合大规模数据连接
缺点:
- 需要足够内存存放哈希表,否则会溢出到磁盘,性能下降
- 仅支持等值连接
- 构建阶段有额外开销
交互演示(简化版)
点击下方按钮,查看一个简单的 Hash Join 模拟过程: