项目中有个需求需要每个月末定时去删除一张表里的历史数据,
刚开始就写了一个简单的delete语句,然后起一个job定时去调用,
后来被告知历史数据量很大,所以从性能和安全上考虑对sql进行了如下修改:
declare cursor id_key_cursor is select id_key from x_table where x_column = "xxx" begin for v_to_del in id_key_cursor loop delete x_table where id_key = v_to_del.id_key if mod(id_key_cursor%rowcount, 5000) = 0 then commit; end if; end loop; commit; end;
上面将处理的数据每5000笔提交一次,分批处理;
id_key可以是x_table的主键,也可以是row_id;