Oracle数据库中hash join和nested loop怎么用
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要为大家展示了"Oracle数据库中hash join和nested loop怎么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Oracle数
千家信息网最后更新 2025年11月08日Oracle数据库中hash join和nested loop怎么用
这篇文章主要为大家展示了"Oracle数据库中hash join和nested loop怎么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Oracle数据库中hash join和nested loop怎么用"这篇文章吧。
Oracle 表的连接方式-----Nested loop join和 Sort merge join
关系数据库技术的精髓就是通过关系表进行规范化的数据存储,并通过各种表连接技术和各种类型的索引技术来进行信息的检索和处理。
表的三种关联方式:
nested loop:从A表抽一条记录,遍历B表查找匹配记录,然后从a表抽下一条,遍历B表........就是一个二重循环 hash join:将A表按连接键计算出一个hash表,然后从B表一条条抽取记录,计算hash值,根据hash到A表的hash来匹配符合条件的记录 sort merge join:将A,B表都排好序,然后做merge,符合条件的选出
对于三种连接,我们都可以使用hint来强制让优化器走:use_hash,use_nl,use_merge.
Nested Loop Join
1.执行原理
例如:select t1.*,t2.* from t1,t2 where t1.col1=t2.col2;访问机制如下:for i in (select * from t1) loop ----t1为驱动表 for j in (select * from t2 where col2=i.col1) loop display results; end loop; end loop;类似一个嵌套循环嵌套循环执行时,先是外层循环进入内层循环,并在内层循环终止之后接着执行外层循环再由外层循环进入内层循环中,当外层循环全部终止时,程序结束
2.步骤如下
a.确定驱动表b.把inner 表分配给驱动表c.针对驱动表的每一行,访问被驱动表的所有行
3.执行计划大致如下
NESTED LOOPSouter_loop --驱动表inner_loop优化器模式为FIRST_ROWS时,我们经常会发现有大量的NESTED LOOP这时,在返回数据给用户时,我们没有必要缓存任何数据,这是nested loop的一大亮点
4.使用场景
一般用在连接的表中有索引,并且索引选择性较好(也就是Selectivity接近1)的时候 也就是驱动表的记录集比较小(<10000)而且inner表需要有有效的访问方法(Index) 需要注意的是:JOIN的顺序很重要,驱动表的记录集一定要小,返回结果集的响应时间是最快的
5.和索引的关系
嵌套循环和索引就像一对孪生兄弟,一般需要共同考量与设计,这从优化器的执行机制可以看出. 比如,存在2张表,一个10条记录,一个1000万条记录 以小表为驱动表,则代价为:10*(通过索引在大表查询一条记录的代价) 如果1000万的大表没有索引的时候,那么COST的代价可想而知 因此,在多表连接时,注意被驱动表的连接字段是否需要创建索引 或者连接字段与该表的其他约束条件字段上是否需要创建复合索引
Sort Merge Join
1.执行原理
select t1.*,t2.* from t1,t2 where t1.id=t2.id;访问机制如下:访问t1,并order by t1_1.id,这里的id代表连接字段访问t2,并order by t2_1.idjoin t1_1.id = t2_1.id,依次交替 比对 归并,但无所谓驱动
2.使用场景
虽说,hash join就是用来替代sj的,但如果你的服务器的CPU资源和MEM资源都很紧张的时候,建议用SORT MERGE JOIN因为hash join比sort merge join需要的资源更多。特别是cpu10g sql tuning 文档上写道:On the other hand, sort-merge joins can perform better than hash joins if both of the following conditions are met:The row sources are already sorted. A sort operation does not have to be done.所以,sj大概就用在没有索引,并且数据已经排序的情况
以上是"Oracle数据库中hash join和nested loop怎么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
循环
驱动
索引
数据
数据库
外层
字段
代价
内容
就是
技术
时候
机制
条件
篇文章
资源
也就是
内层
原理
场景
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
做好网络技术保障
软件开发招聘2017
服务器独享带宽
全国网络技术人才
悠然小天我的世界服务器
网络安全实验室本关
服务器安装需要几天
hp服务器 黑屏
数据库创建时必须提供的不能缺省
辽宁锦州网络安全竞赛
软件开发通信工程算法
哪个服务器比较安全
ibm服务器开机进入安全模式
网络安全合规证明
数据库加一列
广州市泽汛网络技术有限公司
网络安全合格证变更
软件开发5年工作薪资多少合适
嵌入式软件开发和软件测试
纸箱吸塑一体软件开发设计
系统图解如何设置数据库
计算机网络技术答辩题目
软件开发什么岗位好
腾讯云服务器监控api
网络安全尖刀创始人
软件开发公司做什么业务
点我网络技术
COP数据库
网络数据库一般建在什么地方
阴阳师几点清服务器