Oracle SQL优化之多表连接

作者:IT邦德
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
(Web\java\Python)工作,主要服务于生产制造
现拥有 Oracle 11g  OCP/OCM、
Mysql、Oceanbase(OBCA)认证
分布式TBase\TDSQL数据库、国产达梦数据库以及红帽子认证
从业8年DBA工作,在数据库领域有丰富的经验
B站主播Oracle、Mysql、PG实战课程,请搜索:jeames007

擅长Oracle数据库运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。

在这里插入图片描述

前言

在多表联合查询的时候,如果我们查看它的执行计划, 就会发现里面有多表之间的连接方式 多表之间的连接有三种方式: Nested Loops,Hash Join 和 Sort Merge Join. 具体适用哪种类型的连接取决于: * 当前的优化器模式 (ALL_ROWS 和 RULE) * 取决于表大小 * 取决于连接列是否有索引 * 取决于连接列是否排序

1 hash join

使用情况:Hash join在两个表的数据量差别很大的时候.(小表一般会丢在内存中)

在这里插入图片描述
在这里插入图片描述

2 merge join

Merge Join 是先将关联表的关联列各自做排序,
然后从各自的排序表中抽取数据,到另一个排序表中做匹配。
适用情况:

1.RBO模式
2.不等价关联(>,<,>=,<=,<>)
3.HASH_JOIN_ENABLED=false
4. 用在没有索引,并且数据已经排序的情况.

在这里插入图片描述
在这里插入图片描述

3.nested loop

  Nested loops 工作方式是循环从一张表中读取数据(驱动表outer table),
  然后访问另一张表(被查找表 inner table,通常有索引)。
  驱动表中的每一行与inner表中的相应记录JOIN。类似一个嵌套的循环。
适用情况:
适用于驱动表的记录集比较小(<10000)而且inner表需要有有效的访问方法(Index),
并且索引选择性较好的时候.
JOIN的顺序很重要,驱动表的记录集一定要小,返回结果集的响应时间是最快的。

在这里插入图片描述
在这里插入图片描述
如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持
您的批评指正是我写作的最大动力!

❤️ 技术交流可以 关注公众号:IT邦德 ❤️

Supongo que te gusta

Origin blog.csdn.net/weixin_41645135/article/details/121131928
Recomendado
Clasificación