oracle对于大表利用rowid提升update性能
2014-12-18 14:03
465 查看
使用rowid能迅速的定位数据,从而提升update效率
1.在scott表中创建test表
SQL> create table test as select * from dba_audit_trail;
Table created.
SQL> set timing on;
SQL> select count(*) from test;
COUNT(*)
----------
2086439
Elapsed: 00:00:00.73
2. order by rowid 对块进行排序,减少块访问的次数
DECLARE
CURSOR CUR IS
SELECT ROWID AS ROW_ID FROM TEST ORDER BY ROWID;
V_COUNTER NUMBER;
BEGIN
V_COUNTER := 0;
FOR ROW IN CUR LOOP
UPDATE TEST SET USERNAME = 'ghsj_jcsj' WHERE ROWID = ROW.ROW_ID;
V_COUNTER := V_COUNTER + 1;
IF (V_COUNTER >= 1000) THEN
COMMIT;
V_COUNTER := 0;
END IF;
END LOOP;
COMMIT;
END;
PL/SQL procedure successfully completed.
Elapsed: 00:06:04.89
200多万条记录只花了6分多钟,效率还可以。
本文乃原创文章,请勿转载。如须转载请详细标明转载出处
1.在scott表中创建test表
SQL> create table test as select * from dba_audit_trail;
Table created.
SQL> set timing on;
SQL> select count(*) from test;
COUNT(*)
----------
2086439
Elapsed: 00:00:00.73
2. order by rowid 对块进行排序,减少块访问的次数
DECLARE
CURSOR CUR IS
SELECT ROWID AS ROW_ID FROM TEST ORDER BY ROWID;
V_COUNTER NUMBER;
BEGIN
V_COUNTER := 0;
FOR ROW IN CUR LOOP
UPDATE TEST SET USERNAME = 'ghsj_jcsj' WHERE ROWID = ROW.ROW_ID;
V_COUNTER := V_COUNTER + 1;
IF (V_COUNTER >= 1000) THEN
COMMIT;
V_COUNTER := 0;
END IF;
END LOOP;
COMMIT;
END;
PL/SQL procedure successfully completed.
Elapsed: 00:06:04.89
200多万条记录只花了6分多钟,效率还可以。
本文乃原创文章,请勿转载。如须转载请详细标明转载出处
相关文章推荐
- Oracle 利用 rowid 提升 update 性能
- Oracle 利用 rowid 提升 update 性能
- Oracle 利用 rowid 提升 update 性能
- Oracle 利用 rowid 提升 update 性能
- Oracle 利用 rowid 提升 update 性能
- Oracle 利用 rowid 提升 update 性能
- Oracle 利用 rowid 提升 update 性能
- Oracle 利用 rowid 提升 update 性能
- 在Oracle中如何利用Rowid查找和删除表中的重复记录
- 在Oracle中如何利用Rowid查找和删除表中的重复记录
- 在Oracle中利用Rowid查找和删除表中的重复记录
- 利用ORACLE的system帐户默认口令提升权限
- 在Oracle中如何利用Rowid查找和删除表中的重复记录
- 在Oracle中如何利用Rowid查找和删除表中的重复记录(转)
- 利用rowid删除数据,提升性能
- Oracle利用rowid删除表中重复记录
- .net中利用oracle产品自带的数据访问组件(Oracle.DataAccess.dll)提升批量更新操作的执行效率
- 在Oracle中如何利用Rowid查找和删除表中的重复记录
- SQL Server利用ROW_NUMBER()给行编号,类似Oracle的rowID
- 在Oracle中如何利用Rowid查找和删除表中的重复记录