以下的文章主要是介紹加速Oracle數據處理的實際操作方法,還有在實際操作中update要比insert要慢的幾點建議的相關內容的描述,如果你對這一技術的實際應用,心存好奇的話,以下的文章將會揭開它的神秘面紗。
一、提高DML操作的辦法:
簡單說來:
1、暫停索引,更新後恢復.避免在更新的過程中涉及到索引的重建.
2、批量更新,每更新一些記錄後及時進行提交動作.避免大量占用回滾段和或臨時表空間.
3、創建一臨時的大的表空間用來應對這些更新動作.
4、批量更新,每更新一些記錄後及時進行提交動作.避免大量占用回滾段和或臨時表空間.
5、創建一臨時的大的表空間用來應對這些更新動作.
6、加大排序緩沖區
- alter session set sort_area_size=100000000;
- insert into tableb select * from tablea;
- commit;
如果UPDATE的是索引字段,就會涉及到索引的重建,暫停索引不會提高多少的速度,反而有可能降低UPDATE速度,
因為在更新是索引可以提高數據的查詢速度,重建索引引起的速度降低影響不大。
Oracle優化修改參數最多也只能把性能提高15%,大部分都是SQL語句的優化!
update總體來說比insert要慢幾點建議:
1、如果更新的數據量接近整個表,就不應該使用index而應該采用全表掃描
2、減少不必要的index,因為update表通常需要update index
3、如果你的服務器有多個cpu,采用parellel hint,可以大幅度的提高效率
另外,建表的參數非常重要,對於更新非常頻繁的表,建議加大PCTFREE的值,以保證數據塊中有足夠的空間用於UPDATE, 從而降低CHAINED_ROWS。
二、各種批量DML操作:
(1)、Oracle批量拷貝:
- set arraysize 20
- set copycommit 5000
- copy from username/passWord@Oraclename append table_name1
- using select * from table_name2;
(2)、常規插入方式:
- insert into t1 select * from t;
為了提高速度可以使用下面方法,來減少插入過程中產生的日志:
- alter table t1 nologging;
- insert into t1 select * from t;
- commit;
(3)、CTAS方式:
- create table t1
- as
- select * from t;
為了提高速度可以使用下面方法,來減少插入過程中產生的日志,並且可以制定並行度:
- create table t1 nologging parallel(degree 2) as select * from t;
上述的相關內容就是對加速Oracle數據處理的部分內容的描述,希望會給你帶來一些幫助在此方面。