Oracle中常见的表连接方式

本文详细介绍了Oracle数据库中常见的9种表连接方式,包括嵌套循环、哈希连接、排序合并连接、笛卡尔连接、标量子查询、半连接、反连接以及FILTER,并提供了优化和改写建议。例如,嵌套循环适用于小表驱动大表,哈希连接适用于处理大量数据,而半连接和反连接在特定场景下可以改写为内连接或外连接以优化性能。
摘要由CSDN通过智能技术生成

日常学习笔记,这两天复工了,实在是太忙。

第五章看了三天,终于有时间记笔记了。

 

一、嵌套循环(NESTED LOOPS)

嵌套循环的算法:驱动表返回一行数据,通过连接列传值给被驱动表,驱动表返回多少行,被驱动表就要被扫描多少次。(用落总的话就是驱动表多少行,被驱动表就要被干多少次)

加上HINT:FIRST_ROWS,优化器更倾向于嵌套循环。

嵌套循环的驱动表应该返回少量数据。在执行计划中,离NESTED LOOPS关键字最近的表就是驱动表.

如果执行计划走的是嵌套循环,那此时无法更改驱动表,驱动表会被固定为主表。

/*+  use_nl(t1,t2)  */ 

表示让两个表走嵌套循环,在书写HINT的时候,如果表有别名,HINT中一定要使用别名,不然HINT不会生效;如果没有别名,就直接用表名。

判定两个表关联是否走NL应该直接看两表关联返回后的数据量,如果返回的少可以NL,如果多的话就走HASH。

一般情况下,一个小表和大表关联,可以考虑小表NL大表,然后大表的连接列走索引,如果大表有过滤条件,可以和连接列创建组合索引。

 

二、HASH连接(HASH JOIN)

HASH JOIN连接的算法:两表等值关联,返回大量数据,将较小的表作为驱动表。

哈希连接只支持等值连接。

执行计划中离HASH连接关键字最近的表就是驱动表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值