三种连接方式核心对比表
| 连接方式 | 核心原理 | 适用场景 | 索引依赖 | 内存消耗 | 时间复杂度 |
|---|
| NESTED LOOPS | 外层表逐行匹配内层表 | 小表驱动大表、实时查询 | 被驱动表需索引 | 低(<100KB) | O(n*m) |
| HASH JOIN | 构建哈希表后批量匹配 | 大数据量等值连接、无索引 | 无 | 高(需缓存哈希表) | O(n+m) |
| MERGE JOIN | 排序后双指针合并 | 非等值连接、已排序数据 | 可利用排序索引 | 中(排序阶段消耗) | O(n log n + m log m) |
NESTED LOOPS连接

核心特性
- 双层循环:外层表(小表)驱动内层表(大表)
- 早停机制:匹配成功后立即返回结果,适合分页查询
- 优化建议:被驱动表连接列建立高选择性索引,如主键索引
HASH JOIN连接

核心特性
- 两阶段处理:构建阶段(小表生成哈希表)→ 探测阶段(大表匹配哈希桶)
- 无索引依赖:适合数据仓库等无索引场景
- 优化建议:确保PGA_AGGREGATE_TARGET足够,避免哈希表溢出磁盘
MERGE JOIN连接
核心特性
- 排序合并:先排序后合并,支持非等值连接(>、<、BETWEEN)
- 适用场景:RBO模式、不等价关联或数据源已排序
- 优化建议:连接列建立B树索引,避免额外排序开销
执行计划解读要点
- NESTED LOOPS:关注
NESTED LOOPS操作及被驱动表的INDEX SCAN - HASH JOIN:检查
HASH JOIN及Bytes列(哈希表大小) - MERGE JOIN:留意
SORT JOIN(排序开销)和MERGE JOIN操作
场景选择决策树
数据量小且有索引 → NESTED LOOPS
大数据量等值连接 → HASH JOIN
非等值连接或已排序 → MERGE JOIN