meger into优化案例

SQL:

MERGE INTO TP_B_RB033 TP
USING (SELECT SEQ_NO, PAGE_NUM, FULL_PAGE, ACCT_NO FROM TP_B_RB033_RB_TMP) RES
ON (TP.SEQ_NO = RES.SEQ_NO AND RES.ACCT_NO = TP.ACCT_NO)
WHEN MATCHED THEN
  UPDATE
     SET TP.PAGE_NUM = RES.PAGE_NUM, TP.FULL_PAGE = RES.FULL_PAGE
   WHERE SUBSTR(REPORT_DATE, 1, 6) = SUBSTR(:B1, 1, 6)

执行计划:

72ddd525d543cdf2383fb96d55c68011e4a.jpg

执行计划口诀:先从最开头    一直向右看,直到看到最右边并列的地方,对于并列的地方,从上到下看,靠上的先执行;对于不并列,靠右的先执行;

从执行计划可以看到 执行顺序是 4 6 5 3 2 1,驱动表是 *tmp,走的全表扫描,表连接走的是hash 连接。

据业务人员介绍,每天采集交易数据灌注到*tmp表,然后执行这个sql语句同步数据,完成之后再清理掉*Tmp数据,*tmp表数据不是很大,最大的时候也就2万。

所以这个场景使用NL是最好的了,驱动表走索引,被驱动表也要创建索引,

如果有环境  可以  测试一下select 和update看看是哪个慢,这样优化更有针对性。

update 语句的where 条件 ‘WHERE SUBSTR(REPORT_DATE, 1, 6) = SUBSTR(:B1, 1, 6)’需要注意下,对于类似 where id like '%id'是不走索引的,可以改成 ‘WHERE REPORT_DATE like  SUBSTR(:B1, 1, 6)||%’    

总结:

1、*tmp 作为驱动表,要创建索引,

2、被驱动表 TP_B_RB033数据量比较大, 也要创建索引,

3、优化update ,,,,,,,,where SUBSTR(REPORT_DATE, 1, 6) = SUBSTR(:B1, 1, 6) 为‘update ,,,,,,, WHERE REPORT_DATE like  SUBSTR(:B1, 1, 6)||%’

 

转载于:https://my.oschina.net/u/3862440/blog/2873794

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值