Oracle执行计划中的表连接方式解析-精简版

三种连接方式核心对比表

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

NESTED LOOPS连接

NESTED LOOPS流程图

核心特性

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

HASH JOIN连接

HASH JOIN原理

核心特性

  • 两阶段处理:构建阶段(小表生成哈希表)→ 探测阶段(大表匹配哈希桶)
  • 无索引依赖:适合数据仓库等无索引场景
  • 优化建议:确保PGA_AGGREGATE_TARGET足够,避免哈希表溢出磁盘

MERGE JOIN连接请添加图片描述

核心特性

  • 排序合并:先排序后合并,支持非等值连接(>、<、BETWEEN)
  • 适用场景:RBO模式、不等价关联或数据源已排序
  • 优化建议:连接列建立B树索引,避免额外排序开销

执行计划解读要点

  1. NESTED LOOPS:关注NESTED LOOPS操作及被驱动表的INDEX SCAN
  2. HASH JOIN:检查HASH JOINBytes列(哈希表大小)
  3. MERGE JOIN:留意SORT JOIN(排序开销)和MERGE JOIN操作

场景选择决策树

数据量小且有索引 → NESTED LOOPS
大数据量等值连接 → HASH JOIN
非等值连接或已排序 → MERGE JOIN
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值