oracle 大数据量update优化方案

2025-03-22 11:00:55
推荐回答(1个)
回答1:

sql 写法有问题的,aa 表读了两次。
改写成如下试试
UPDATE aa

SET TRADE_STATUS = '0'
where exists (
select 1 from bb d where d.id= c.id and d.state= c.state
and d.DAY = '20150503'
) and c.TYPE = '1' AND c.PAYDATE is null;

bb 表上的 id 、 state 和 DAY 上应建组合索引,这样子查询效率很高。
aa 表上 TYPE 可以根据数据量考虑是否建索引;如果 TYPE =1 占比很小 (比如小于 1/30 建索引可能快些,否则 全表扫描 一次读取多个数据块;可能全表扫描效率更好)