暂无图片
ORACLE SQL优化
我来答
分享
寨寨🍒
2021-11-03
ORACLE SQL优化

merge into tbp_transaction b 

using case3_transkey a 

on (a.transkey=b.transkey)

when matched then update set

b.last_upd_dt=(case when b.last_upd_dt <=to_date('20211102','yyyymmdd') then to_date('20211102','yyyymmdd') else b.last_upd_dt end);

各位大神,上面SQL 主表 tbp_transaction 是分区表,transkey 和 last_upd_dt 是索引列,数据量8亿,最后更新的数据量是 800多万,更新了2个小时,怎么样可以优化一下。

是因为last_upd_dt  是索引列,所以慢么

或者在merge into tbp_transaction b 加上并行 merge/*+parallel(b,32)*/ into tbp_transaction b 可以提升么

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
于志君

last_upd_dt是索引列,更新时肯定会维护索引,如果绝大部分数据要更新,可以把索引先unusable,更新后再rebuild索引,开并行的话是不是得把允许dml并行打开才行,把执行计划贴出来看看

暂无图片 评论
暂无图片 有用 0
寨寨🍒
题主
2021-11-04
公司电脑不太好拿,执行计划是走a.transkey 这个索引的
赵勇

1、需要提供执行计划,才能较准确的判断问题点。2、主表的分区键列是哪个列?何种分区?2、case3_transkey表的数据量有多少?

暂无图片 评论
暂无图片 有用 1
寨寨🍒
题主
2021-11-04
1.执行计划走了b.transkey这个全局索引。2.主表的分区键列是 b.transkey,range--hash组合分区。3.case3_transkey的表有800多万。4.更新语句中b.last_upd_dt也是索引列
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏