帮你快速理解、总结文档立即下载

并行 Hash Join

最近更新时间:2026-08-21 10:36:00
我的收藏

功能概述

TDSQL Boundless 新增并行 Hash Join(PHJ)能力,通过多个执行线程协作构建一张共享哈希表,大幅降低多表关联查询的内存消耗,同时提升查询执行速度。该功能适用于数据分析、报表查询、多表关联等场景,尤其在大数据量 Join 操作中效果显著。

功能开关

主开关:tdsql_enable_parallel_hash_join
会话级开关,默认关闭。开启后,并行 Hash Join 默认选择本地 Worker 执行
开启后,表示允许优化器为合适的 JOIN 选择并行 Hash Join
开启后并不代表所有 JOIN 都一定会使用该能力,最终仍由优化器按代价选择
可选调优方式:如需进一步控制并行度或分发方式,可结合 PARALLEL()PQ_DISTRIBUTE() hint 做验证和调优

计划形态

并行 Hash Join 常见的计划形态如下:
Shared hash
多个 worker 共同构建并探测一份共享哈希表
常见于两侧都具备较好并行扫描收益的场景

EXPLAIN FORMAT=tree SELECT /*+ PARALLEL(t1) PARALLEL(t2) */ * FROM t1 LEFT JOIN t2 ON t1.a = t2.a;
EXPLAIN
-> Gather (slice: 1, workers: 4) (cost=*** rows=***)
-> Left hash join (t2.a = t1.a) (cost=*** rows=***)
-> Table scan on t1, with range parallel scan (cost=*** rows=***)
-> Shared hash
-> Table scan on t2, with range parallel scan (cost=*** rows=***)


性能收益

提升大表 Join 吞吐:build/probe 可并行执行,更充分利用多核 CPU 能力
提升扫描型分析 SQL 性能:对大表扫描、索引收益不明显、需要处理较多连接数据的场景收益更明显
降低单线程热点:将连接阶段的处理压力分摊到多个 worker,缩短大查询执行时间
自动选择更优执行方式:优化器会在 Shared hash、Gather + Hash 等候选方案间做代价比较,自动选择更优计划
预期说明:对小表、返回行数较少、或已有高效索引的场景,性能收益可能不明显

使用建议

建议按会话开启验证 SET SESSION tdsql_enable_parallel_hash_join = ON;
单条 SQL 通过 HInt set_var(tdsql_enable_parallel_hash_join=on)开启