oracle 嵌套 哈希,表连接三剑客(嵌套循环连接,哈希连接,排序合并连接)

本文介绍了Oracle数据库的三种表连接方式:嵌套循环连接、哈希连接和排序合并连接。嵌套循环连接适用于小范围匹配,哈希连接依赖内存建立哈希表,不支持不等值连接;排序合并连接需要排序,适用于有索引的等值连接。优化策略包括在限制和连接条件列建立索引,以及适当调整数据库参数。
摘要由CSDN通过智能技术生成

表连接三剑客(嵌套循环连接,哈希连接,排序合并连接)

1.表连接的定义:

例子1:有一个特别的舞会,男孩子集中在一个房间,女孩子集中在另外一个房间,舞池设置在两个房间中间.

开始跳舞时,从男孩子中选出一个à然后进入女孩子所在房间à选择出高度合适的女孩!这种方式成为àNESTED LOOPS JOIN(嵌套循环连接)

例子2:男孩子在房间里面先按身高进行排序à女孩子也在房间按照身高进行排序à男女双方按照排列好的顺序依次出来到舞池中间跳舞

这种方式称为àHASH连接(由PGA中的HASH_AREA_SIZE参数来控制)或者MERGE SORT JOIN(排序合并连接)(由PGA中的SORT_AREA_SIZE参数控制)

2.表连接的特点

(1)嵌套循环连接:驱动表返回多少条记录,被驱动表就反问多少次!

其中例子:

Select/*+ leading(t1) use_nl(t2)*/ from t1,t2 where t1.id = t2.id;

Use_nl表示强制使用嵌套循环连接的方式,leading(t1)表示强制先访问t1表,也就是t1表作为驱动表。

不会产生排序操作。支持所有的连接条件,没有任何限制。

嵌套循环连接适用场景:

A.两表关联返回的记录不多,最佳情况是驱动表结果集仅返回1条或者少量几条记录,而被驱动表仅匹配到1条或少量几条记录,这种情况即便T1表和T2表的记录奇大无比,也是非常迅速 ?????(不明白,不应该是遍历两个表吗??怎么会很快??)

B.遇到一些不等值查询导致哈希连接和排序合并连接被限制使用。

优化思路:

驱动表的限制条件所在列有索引,被驱动表的连接条件的列有索引。

例如:se

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值