Oracle数据库中hash join和nested loop怎么用
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章主要为大家展示了"Oracle数据库中hash join和nested loop怎么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Oracle数
千家信息网最后更新 2025年01月21日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安全错误
数据库的锁怎样保障安全
长沙有电脑软件开发公司吗
检查fpt服务器是什么意思
数据库中扩展字段取名
仙侠世界服务器
崇州软件开发公司
数据库顺序取前三
网络安全青年争先海报简介
蜗牛网络安全培训
上市网络安全公司
延庆区网络技术信息热线
网络技术应用教教科版
比较好的网络安全杂志
软件开发工程师的目标职业
大学生网络安全画
闵行区新能源软件开发诚信服务
店铺管理系统数据库设计报告
清华大学网络安全学院毕业生
计算机网络安全2016
简述数据库故障
软件开发这行为什么也难找工作呢
金华比特网络技术
怎么看一个数据库收录多少文献
西安卡拉克网络技术有限公司
未来网络技术与应用技术
通信设备软件开发mfc
sybase数据库安全配置
学习数据库技术的关键在于哪里
网络安全防范宝典
win7怎么备份数据库文件
qt如何使用mysql数据库