ORACLE 存储过程优化小实践

近日,接触到ORACLE 存储过程的优化问题,业务过程非常简单。
该存储过程的主要DML操作就是UPDATE,需要根据某个条件对数
据表的某个字段进行更新,其中使用到游标。之后写了个测试的例
子,以下具体介绍。
测试环境:
OS:WINDOWS XP +Intel(R) 2CPU(1.60GHz) + 1GB
数据库: ORACLE10g
测试数据:10万行
存储过程代码:
CREATE OR REPLACE PROCEDURE prc_update_0
IS
  TYPE tab_id IS TABLE OF ROWID;
  CURSOR cur_sky IS SELECT  ROWID FROM TBL_USER_AUTH WHERE IMSI IS NOT NULL;
BEGIN
  OPEN cur_sky ;
  FETCH cur_sky BULK COLLECT INTO  v_rowid ;
  FORALL i IN 1..v_rowid.COUNT 
    UPDATE  TBL_USER_AUTH SET MPXYZDATAE='nsofsofmslfd' WHERE ROWID = v_rowid(i);
  COMMIT;
  CLOSE cur_sky;
EXCEPTION
  WHEN others THEN
  ROLLBACK;
  DBMS_OUTPUT.PUT_LINE('Update  failed !');
END;
/

CREATE OR REPLACE PROCEDURE prc_update_1
IS
  v_rowid  ROWID;
  CURSOR cur_sky IS SELECT  ROWID FROM TBL_USER_AUTH WHERE IMSI IS NOT NULL;
BEGIN
  OPEN cur_sky ;
  LOOP
  FETCH cur_sky  INTO  v_rowid ;
  EXIT WHEN cur_sky%NOTFOUND;
    UPDATE  TBL_USER_AUTH SET MPXYZDATAE='nsofsofmslfd' WHERE ROWID = v_rowid;
  END LOOP;
  COMMIT;
  CLOSE cur_sky;
EXCEPTION
  WHEN others THEN
  ROLLBACK;
  DBMS_OUTPUT.PUT_LINE('Update  failed !');
END;
/


测试结果:

                                        运行次数
    时间(s)         1  2  3  4  5  6  7  8  9  10  avg
prc_update_0     5  4  4  7  4  4  8  8  4  8  5.6
prc_update_1     9  11 9  10 13 9  9  9  11 9  9.9




从以上结果可以看出:
对于游标的循环,BULK COLLECT对性能的改善有很大的提高。
实验数据只有10万行,当数据量达到千万级的时候,运行时间
的差距就非常明显。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值