永发信息网

执行计划中,数据连接方式nested loops和hash join有什么区别

答案:2  悬赏:20  手机版
解决时间 2021-02-28 18:57
执行计划中,数据连接方式nested loops和hash join有什么区别
最佳答案
嵌套循环(Nested Loops (NL))

假如有A、B两张表进行嵌套循环连接,那么Oracle会首先从A表中提取一条记录,然后去B表中查找相应的匹配记录,如果有的话,就把该条记录的信息推到等待返回的结果集中,然后再去从A表中提取第二条记录,去在B表中找第二条匹配的记录,如果符合就推到返回的结果集中,依次类推,直到A表中的数据全部被处理完成,将结果集返回,就完成了嵌套循环连接的操作。

(散列)哈希连接(Hash Join (HJ))

假如有A、B两张表进行哈希连接,那么ORACLE会首先将B表在内存中建立一棵以散列表形式存在的查询二叉树C,然后开始读取A表的第一条记录,从C中去找匹配的记录,如果有,则推到结果集中。再提取A中的第二条记录,如果有,则推到结果集中,以此类推,直到A中没有记录,返回结果集。

(归并)排序合并连接(Sort Merge Join (SMJ) )

假如有A、B两张表进行排序合并连接,ORACLE会首先将A表进行排序,形成一张临时的“表”C,然后将B进行排序,形成一张临时的“表”D,然后将C与D进行合并操作,返回结果集。

如果从预获取的数据量的角度而言,如果B表参与计算的数据量比较小的话,则嵌套循环连接的效率就是比较高的,因为可以很少的IO就可以获取到最终的结果集。但是如果数据量比较大的话,hash join和sort merge join是比较有优势的。

如果从索引的角度而言,索引可以提高nested loops的效率,因为从B表获取数据进行操作,就类似于从单表中查询数据一样,table
access full和by
index的效率肯定是不一样的,但是这个也取决于B的参与计算的数据量,如果B表的数据都在可以被一次抓取的数据块的大小之内的话,那么索引未必会被使用到。

如果从内存的角度上,同样的数据量nested loops的内存占用应该是最小的,sort merge 应该是最大的,而hash
join内存消耗在中间。只是一种感官的直觉,具体没有测试过,因为sort merge 需要创建两个排序表,而hash
join则需要对B表创建一棵查询树。

怎么从hash的角度上来看呢?估计三种表都有hash的使用,使用hash更多的是为了提高查询的效率,比如8=power(2,3),如果使用hash,可能需要创建一棵hash树,就增大了空间的消耗,如果table
access
full的话,需要最少扫描1次,最多扫描8次。如果使用hash,则最少1次,最多3次,就可以了,使用空间获取时间上的优势。在这个里面,至少感觉到使用到hash的有nested
loops中的索引和hash join。
全部回答
首先,每隔一段时间要对经常用到的表进行统计分析(analyze table),让oracle分析出最合适的执行计划; 如果要一直监控sql的执行计划,可以使用trace工具,这个是对session级运行的, exec dbms_system.set_sql_trace_in_session(sid,serial#,t
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
天香阁商务礼品在什么地方啊,我要过去处理事
下图A、B、C、D(纵坐标代表生长过程,横坐标
艾克打野ap好还是肉打野好
中层管理者多是有力无心?有心无力?还是?
霍吞萨拉艾肯地址有知道的么?有点事想过去
配电箱怎么计算工程量
数字万用表UAT-D DT9205A测电阻 200m档,显示1
什么植物可以让人平心静气,心平气和,最好还
为啥现在猫猫们都喜欢仰睡
北京教育人才培训中心继续教育部怎么去啊,有
---Jim isn’t in the classroom. Where
向日葵有多少种
动物的“语言”是指动物之间传递信息作用动作
高中生 高三学习 觉得累了 看什么书可以缓解
审美淀堂怎么去啊,有知道地址的么
推荐资讯
【三起三落是什么服务】骆驼祥子中的“三起三
flame resistant glass fiber filled diallyl
1980年5元、10元人民币是否有珍藏价值
锦城文化运动中心这个地址在什么地方,我要处
祛疤,用玫瑰果油的相关问题
优优果园豪德店我想知道这个在什么地方
蓝精灵地址有知道的么?有点事想过去
一字墙我想知道这个在什么地方
成都装修队哪个好?
补写下列名句名篇中的空缺部分。(6分) (1
新买来的落煎饼的鳌子,怎么样才能好用
天津亚富路小额贷款可以0首付购车吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?