本文已经发表在ITPUB优化技术丛书,未经许可,不得转载。
本文已经发表在ITPUB优化技术丛书,未经许可,不得转载。
1.1. 第五次优化——使用FORALL + 原子级操作
这一次的优化过程已经很清晰了,主要是综合了前面几次优化的思想,将他们的优点集中使用,即:
1) 分段处理:将整个大的事务分割为以10000行为单位的小事务,其中,10000这个基数来自于上面使用批量测试时的结果(从删除10000条记录到删除100000条记录,所需要的操作时间已经出现了比较大的倍数关系)。
2) 拆分操作:避开庞大的IN-LIST条件,而是采用原子级的处理。
3) 批量绑定:使用FORALL进行批量绑定,以数组方式处理,大大减少了PL/SQL引擎和SQL引擎的上下文切换,从而提高了处理速度。
现在,首先来构造以10000为单位的FORALL处理过程:
create or replace procedure del_hubei_SSF_forall as type ridArray is table of rowid index by binary_integer; type dtArray is table of varchar2(50) index by binary_integer;
v_rowid ridArray; v_mid_to_delete dtArray;
begin select mid,rowid bulk collect into v_mid_to_delete,v_rowid from temp_mid_hubei_bak where rownum<10001;
forall i in 1 .. v_mid_to_delete.COUNT delete from SSF where mid = v_mid_to_delete(i); -- DBMS_OUTPUT.PUT_LINE(to_char(v_mid_to_delete.COUNT)||' records deleted from hubei_SSF &n |