Oracle数据库中hash join和nested loop怎么用
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要为大家展示了"Oracle数据库中hash join和nested loop怎么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Oracle数
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
西安纸贵互联网科技有限公司
中国互联网科技股
互联网公司 科技公司
互联网 科技创业
唐信互联网科技 大连
互联网养老 桔豆科技
科技类的互联网平台
丰台科技园 互联网公司
甘肃拓世互联网科技有限公司
顺网科技2021年互联网排名
广州优美互联网科技
互联网为啥属于高科技
青海科技产业互联网发展
佛山市翊博互联网络科技有限公司
互联网金融科技名词解释
互联网科技快讯热点
上海万顺科技互联网有限公司招聘
科技信息时代互联网发展
山东蛋芒互联网科技有限公司
互联网科技快速发展优美句子
互联网科技公司华为
互联网科技深圳
没上市的科技互联网公司
互联网科技素材视频竖屏
湖南诚度互联网科技有限公司
电子商务与互联网科技的关系
云鲸互联网络科技有限公司
长沙易易互联网科技有限公司
东风日产互联网科技公司叫什么
互联网科技创业有什么好项目