搜索
首页
大数快讯
大数活动
服务超市
文章专题
出海平台
流量密码
出海蓝图
产业赛道
物流仓储
跨境支付
选品策略
实操手册
报告
跨企查
百科
导航
知识体系
工具箱
更多
找货源
跨境招聘
DeepSeek
首页
>
Oracle表连接浅释
>
0
0
Oracle表连接浅释
智业人
2016-11-15
1
导读:Oracle优化涉及Oracle逻辑结构、物理结构,SQL Explain、TKPROF、DBMS_STATS包、表属性等很多方面内容,Oracle表连接只是Oracle解释计划内容中一部分,学会表连
(智业人微信公众号:zoesoft,猛击关注)
一、前言
Oracle优化涉及Oracle逻辑结构、物理结构,SQL Explain、TKPROF、DBMS_STATS包、表的属性等很多方面内容,Oracle表连接只是Oracle解释计划内容中一部分,学会表连接是理解Oracle解释计划的必由之路。
二、浅谈Oracle常见表连接
Oracle表连接是Oracle处理SQL中多表检索数据时使用的方式。使用哪种表连接是根据子句中的多个表连接方式以及表中数据大小,语句中的连接方式决定表之间关系。常见的表连接方式有如下几种:
NESTED LOOP JOIN
HASH JOIN
SORT MERGE JOIN
(一)NESTED LOOP JOIN
NESTED LOOP是当连接的数据子集较小的情况下使用,在嵌套循环中,内表(被驱动表)被外表(驱动表)驱动,外表(驱动表)返回的每一行都要在内表中检索找到与它匹配的行,整个查询返回的结果集一般都很小,同时要把返回子集较小表的再次作为外表(驱动表),并且在内表(被驱动表)的连接字段上一定要有索引。使用/*+ leading(表名) use_nl(表名) */可是强制CBO执行嵌套循环连接,在CBO模式下,Oracle会决定哪一个表做驱动表。
特点:
1.SQL语句中驱动表只访问一次, 被驱动表访问多次;
2. 不必等待处理完成所有行前可以先返回部分已经处理完成的数据;
3. 在限制条件以及连接条件列上建立索引, 能够提高执行效率;
4. 支持所有类型的连接 (等值连接, 非等值连接, like 等);
NESTED LOOP 适合小表之间连接,当表数据量大时,Oracle就会自动使用HASH JOIN。
驱动表:RBO中from后最后一张是驱动表,CBO中输出数据量最少的是驱动表,Oracle会自动选择数据量小的表做驱动表。驱动表是基表,其他表是基于驱动表来嵌套,也叫被驱动表。
(二)HASH JOIN
散列(HASH)连接是CBO做大数据集连接时的常用方式,是从Oracle7.3后Oracle最先进的表连接方式,Oracle在后续的版本中一直在优化此连接方式。HASH JOIN只能用于相等连接,且只能在CBO优化器模式下。HASH JOIN只有大小数据集,没有驱动表、被驱动表的概念,优化器会挑选两个表中较小的表(或集合)利用连接键在内存中建立散列(HASH)表(做HASH运算),然后扫描较大的表并探测散列表,找出与散列表匹配的行。
HASH JOIN连接时,当出现较小的表可以完全放于内存中的情况时,这样总成本就是访问两个表的成本之和。当表很大的情况下并不能完全放入内存,这时优化器会将它分割成若干不同的分区,将不能放入内存的部分就把该分区写入磁盘的临时段。使用USE_HASH(table_name1 table_name2)提示来强制使用散列连接。
特点:
1.HASH JOIN不适用于的连接条件是:不等于<>,大于>,小于<,小于等于<=,大于等于>=,like,只能用于CBO,而且只能用于等值连接的条件;
2.HASH JOIN的表没有驱动顺序;
3.HASH JOIN最适用于小表和大表之间做连接且连接结果集的记录数较多的情形;
(三)MERGE SORT JOIN
排序连接现在使用的环境比较少,如果数据源已经被排过序,在执行排序合并连接时不需要再排序了,这时排序合并连接的性能会优于散列连接(HASH JOIN)。但一般情况下HASH JOIN 性能优于MERGE SORT JOIN,可以使用USE_MERGE(table_name1 table_name2)来强制使用排序合并连接。当表特别小或特别巨大的时候,实行全表访问可能会比索引范围扫描更有效。尤其是子句中使用其中大于>,小于<,大于等于>=,小于等于<=。
特点:
1.不太适用于OLTP系统;
2.对于表特殊情况,比如表本身已经排序了,比较适用;
三、总结
表连接方式对于理解解释计划及数据库调优有着重要影响,对于日后数据优化及建模也具有一定的参考、学习价值。单独学习表连接方式不能提高你的数据库优化能力,但对Oracle执行SQL的整个过程,以及对表数据的分析。
学习表连接这点东西,并不能把数据库优化全部涵盖,但表连接是深入理解oracle解析SQL的一部分,数据库优化说起来容易,实际操作起来比较困难,要学习的内容很多,从硬件到软件,操作系统、内存到AWR,本文只是学习优化过程中必须掌握的内容之一,通过对表连接的理解,抛砖引玉,让大家引起对数据库底层、建模、建表参数等加强重视,一个好的数据库模型,对业务、数据检索发挥着重要影响,可以减少代码的复杂性以及冗余量,减少不必要数据关联及数据检索,从而降低
服务
器压力,提高执行效率。
表连接是执行计划的一部分,而执行计划又是数据库优化的一个
工具
,表与表之间的连接方式新版本的oracle已经自动选择了,但是如果数据库采集的数据不准确、滞后,或者业务数据大幅度的变化就会使oracle无法准确的使用表的连接方式,一般情况下不需要开发人员强制使用哪种连接方式。
点击
阅读原文
查看本期其他精彩内容
【声明】内容源于网络
0
0
智业人
智业软件最主要的发声筒和讨论平台。在这里,您可以看到智业人在聊行业、谈技术、说产品、看趋势,以智发声,碰撞观点,一齐在医疗信息化道路上摸索前进。
内容
932
粉丝
0
关注
在线咨询
智业人
智业软件最主要的发声筒和讨论平台。在这里,您可以看到智业人在聊行业、谈技术、说产品、看趋势,以智发声,碰撞观点,一齐在医疗信息化道路上摸索前进。
总阅读
93
粉丝
0
内容
932
在线咨询
关注