/*+ driving_site(table) */优化

同事询问一个SQL执行了10分钟才出结果问还有没有优化空间;

SQL结构类似于:

select a.object_id,b.object_type,c.object_sid

from a1@dblink1 a,a2@dblink2 b,a3@dblink3 c,d4

where a.object_id=b.object_id

and b.object_ccid=c.object_ccid

and c.object_sod=d.object_sod

and existst ...;


我问:远程通过DBLINK的3个表数据量多大?

同事答:不知道

我回:好,我count一下


结果是远程表都是大表有些上亿行,而d4表有个特征在本过滤后的结果集很小,于是就想到了driving_site;

改造SQL,再次运行,结果降为3分钟

select /*+ driving_site(a) driving_site(b) driving_site(c) */ a.object_id,b.object_type,c.object_sid

from a1@dblink1 a,a2@dblink2 b,a3@dblink3 c,d4

where a.object_id=b.object_id

and b.object_ccid=c.object_ccid

and c.object_sod=d.object_sod

and existst ...;

同事又问:为什么用explain plan for看时预估的时间更长,而实际跑的时间却更短?

我答:这个是只是参考,实际结果并不一定如些;


小结:对于有些SQL,ORACLE并没有其实际的参考统计信息可用,比如远程的表的结果集,ORACLE并不能清晰知道,这种情况下

对于业务和返回集多少的了解更能帮助调整SQL的执行计划方向 ;


备注:本篇中的HINT是想告诉ORACLE,将3个含有DBLINK的3个表对象在远程端执行而不需要传到本地,反而是将本地的D4表传到远程的库上去执行;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值