[Oracle]oracle SQL优化 driving_site解决 DBLINK关联效率

 需求情况是从三个不同的库取数据关联。
1、v_tjjmrhjsj@ambers_Link数据量稍大,无法预先筛选数据,且为远程数据视图。
2、ta2.tdividenddetail为本地用户同一实例下另一用户的表,数据量相对较小,可以预先筛选小数据集。
3、ppos.tworkdiary_profit@GJDFPPOS为远程数据库,数据量相对较小,可以预先筛选小数据集。
目前思路是td和tp表关联,得到较小的数据集再和t关联得到最终的结果集。
以下代码实际执行效率捉急,由于t表是远程数据视图, 默认情况下将会把数据拉到本地进行关联,时间消耗在了数据传输上,整个SQL在设计数据量下执行时间大概是2.5~3秒,。因此需要进行特定的执行计划优化。

SELECT a.c_fundcode,
       a.d_cdate,
       a.d_reinvestdate,
       a.f_netvalue,
       t.en_dwjz
from v_tjjmrhjsj@ambers_Link t,
(SELECT distinct tp.c_fundcode,
        tp.d_cdate,
        tp.d_reinvestdate,
        td.f_netvalue
  FROM ta2.tdividenddetail td,
       ppos.tworkdiary_profit@GJDFPPOS tp
 WHERE tp.d_reinvestdate='20201211'
   and tp.c_flag <> '现金红利'
   and tp.c_reviewstatus='1'
   and td.c_flag = '0'
   and td.c_fundcode = tp.c_fundcode
   and td.D_REGDATE = tp.D_REGDATE) a
WHERE to_date(a.d_cdate,'YYYYMMDD') = t.d_rq
and a.c_fundcode = t.vc_fjjjdm
and a.f_netvalue <> t.en_dwjz

以下为加入hint优化后的代码, 在同等业务数据量下耗时0.1秒左右。
hint解释为以t视图作为"本地表", 用a集合数据来驱动t ,得到的结果集传回真正的本地。

SELECT /*+ driving_site(t) use_nl(a,t) leading(a)*/ a.c_fundcode,
       a.d_cdate,
       a.d_reinvestdate,
       a.f_netvalue,
       t.en_dwjz
from (SELECT distinct tp.c_fundcode,
        tp.d_cdate,
        tp.d_reinvestdate,
        td.f_netvalue
  FROM ta2.tdividenddetail td,
       ppos.tworkdiary_profit@GJDFPPOS tp
 WHERE tp.d_reinvestdate='20201211'
   and tp.c_flag <> '现金红利'
   and tp.c_reviewstatus='1'
   and td.c_flag = '0'
   and td.c_fundcode = tp.c_fundcode
   and td.D_REGDATE = tp.D_REGDATE) a,
  v_tjjmrhjsj@ambers_Link t
WHERE to_date(a.d_cdate,'YYYYMMDD') = t.d_rq
and a.c_fundcode = t.vc_fjjjdm
and a.f_netvalue <> t.en_dwjz

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值