Oracle典型的表连接类型(sort merge join(SMJ) 排序-合并连接、nested loops(NL) 嵌套循环、hash join 哈希连接)

1、sort merge join(SMJ) 排序-合并连接
连接过程:
将两个表排序,然后再进行join
①首先生产drving table【驱动表】需要的数据,然后对这些数据按照连接操作关联列进行排序;
②然后生产probed table【被探查表】需要的数据,然后对这些数据按照与driving table对应的连接操作列进行排序;
③最后两边已经排序的行被放在一起执行合并操作。
应用场景:
①排序是一个费时、费资源的操作,特别对于大表。所以SMJ通常不是一个特别有效的连接方法,但是如果driving table和probed table都已经预选排序,则这种连接方法的效率也比较高。
②对于非等值连接,这种连接方式的效率是比较高的;
③如果在关联的列上都有索引,效果更好;
④对于将2个较大的row source做连接,该连接方法比NL连接要好一些,但是如果sort merge返回的row source过大,则又会导致使用过多的rowid在表中查询数据时,因为过多的I/O,数据库性能下降。

2、nested loops(NL) 嵌套循环
连接过程:
连接过程就是将driving table【驱动表】和probed table【被探查表】进行一次嵌套循环的过程。就是用driving table【驱动表】的每一行去匹配probed table【被探查表】的所有行。nested loops有其他方法没有的一个优点:可以先进行返回已经连接的行,而不必等所有的连接操作处理完成才返回数据,这可以实现快速响应时间。
内部连接过程:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值