在 Join 的物理计划里,build side(构建侧) 和 probe side(探测侧) 主要出现在 Hash Join 类算法中:
- build side:先读入、在内存中构建哈希表的一侧。
- probe side:后读入、逐行拿 join key 去哈希表里查找匹配的一侧。
一句话:build 侧建表,probe 侧查表。
1. 典型 Hash Join 工作流程
以 A JOIN B ON A.id = B.id 为例:
选择 build side
优化器通常选过滤后数据量小、列少、适合放内存的一侧作为 build side。比如 B 小,就用 B 建哈希表。Build 阶段
扫描 B,对每一行计算 hash(B.id),把 B.id -> B 行/需要的列 存入哈希表。
哈希表通常按 hash 分桶,桶内还要做 key 的等值比较,因为不同 key 可能哈希冲突。Probe 阶段
扫描 A,对每一行计算 hash(A.id),定位到哈希桶,再比较 key,找到匹配的 B 行就输出连接结果。
如果 A 的一行匹配到多条 B 行,就输出多行。外连接补充 NULL
左外连接、右外连接、全外连接还需要记录“哪些 build 行被匹配过”,或对 probe 侧未匹配行补 NULL。