绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
优化hash连接
2020-09-23 15:52:30

HASH连接需要两个表只扫描一遍,针对连接字段做Hash连接后返回用户所需数据,对于大表而言PGA很可能成为瓶颈,走TEMP空间会拖慢SQL的执行,如果无法调整表连接方式,就需要其他方式做优化,这里我们提供一个Hash的优化思路。


1 —使用并行以及指定广播表优化hash连接

小表a 和大表bhash如何优化

create table a as select * from all_objects where object_id<101;

create table b as select * from all_objects ;


默认执行计划

explain plan for select * from a ,b where a.object_id=b.object_id;


select * from table(dbms_xplan.display);


开并行

explain plan for select /*+ parallel(2) */ * from a ,b where a.object_id=b.object_id;



select * from table(dbms_xplan.display);


指定hash连接,开并行,小表向大表广播

explain plan for select /*+ parallel(2) use_hash(a ,b)  pq_distribute(a none,broadcast)  */ * from a ,b where a.object_id=b.object_id;



select * from table(dbms_xplan.display);


2 hash 大表a 和大表 b  连接

使用hash-hash的方式,将两个大表根据并行度分别hash,再做hash连接


explain plan for select /*+ parallel(2) use_hash(a ,b)  pq_distribute(b hash,hash)  */ * from a ,b where a.object_id=b.object_id;


select * from table(dbms_xplan.display);



alter session set statistics_level=all;

set line 200 pagesize 200;

 select /*+ parallel(2) use_hash(a ,b)  pq_distribute(b hash,hash)  */ * from a ,b where a.object_id=b.object_id;



select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));


分享好友

分享这个小栈给你的朋友们,一起进步吧。

Oracle运维新鲜事-技术与管理各占半边天
创建时间:2020-08-04 11:34:57
本技术栈旨在分享技术心得,运维趣事,故障处理经验,调优案例,故障处理涉及集群,DG,OGG,大家生产中遇到的问题基本都会囊括了,我会发布生产库遇到的故障,希望在交流中互助互益,共同提高,也希望大家讨论,如果您有生产中遇到的集群问题,也可以在这里提出来,一起讨论,现实中也帮助不少同学解决了生产库的故障。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • Abraham林老师
    栈主
  • 小雨滴
    嘉宾
  • hawkliu
    嘉宾
  • u_97a59a25246404
    嘉宾

小栈成员

查看更多
  • 栈栈
  • dapan
  • 小菜鸟___
  • hwayw
戳我,来吐槽~