HashJoin(哈希连接)是关系型数据库中用于执行表连接(JOIN)操作的一种高效算法,特别适用于大表之间的等值连接(Equi-Join)。它通过构建哈希表来加速匹配过程,在现代数据库系统(如 PostgreSQL、Oracle、SQL Server 等)中被广泛使用。
HashJoin 的基本原理
HashJoin 分为两个阶段:
- 构建阶段(Build Phase):选择较小的表(称为“内表”或“构建表”),对其连接键建立哈希表。
- 探测阶段(Probe Phase):遍历较大的表(称为“外表”或“探测表”),对每一行的连接键计算哈希值,并在哈希表中查找匹配项。
若找到匹配,则输出组合后的结果行。
适用场景
- 连接条件为等值连接(如
a.id = b.id) - 其中一个表明显小于另一个(内存可容纳哈希表)
- 无有效索引可用,或索引效率低于哈希方式
与其他 JOIN 算法对比
- Nested Loop Join:适合小表或有索引的情况,但大表连接时性能差。
- Merge Join:要求两表已按连接键排序,适合预排序数据。
- HashJoin:不依赖索引,对未排序大数据集效率高,但需足够内存。
注意事项
当内表过大无法完全载入内存时,数据库会采用“分区哈希”(Grace Hash Join)策略,将数据分批处理并写入磁盘临时文件,此时性能会下降。因此,合理评估内存与数据量对 HashJoin 至关重要。