INSERT 逐行提交 批量提交及極限提速方法

2021-06-28 21:54:36 字數 2166 閱讀 9161

在oracle資料庫中,不是提交越頻繁越好。恰恰相反,批量提交可以得到更好的效能。這篇文章給大家簡單展示一下在oracle資料庫中逐行提交於批量提交兩者之間的效能差別。最後再給出一種可以極大改變效能的方法。

sec@ora10g> create table t_ref as select * from all_objects;

sec@ora10g> insert into t_ref select * from t;

220248 rows created.

sec@ora10g> /

sec@ora10g> /

sec@ora10g> /

sec@ora10g> /

sec@ora10g> /

440496 rows created.

我們的目標是將t_ref表中的資料全部插入到t中。

sec@ora10g> set timing on

sec@ora10g> declare

2 begin

3 for cur in (select * from t_ref) loop

4 insert into t values cur;

5 commit;

6 end loop;

7 end;

8 /

pl/sql procedure successfully completed.

elapsed: 00:03:12.77

逐行提交的情況下,一共用時3分12秒。

sec@ora10g> truncate table t;

table truncated.

sec@ora10g> declare

2 v_count number;

3 begin

4 for cur in (select * from t_ref) loop

5 insert into t values cur;

6 v_count := v_count + 1;

7 if v_count >= 100 then

8 commit;

9 end if;

10 end loop;

11 commit;

12 end;

13 /

pl/sql procedure successfully completed.

elapsed: 00:01:27.69

此時共用時1分27秒,大約是逐行提交方法一半的時間。由此可見,對於oracle應該盡量以批量提交的方式來完成工作。

sec@ora10g> declare

2 cursor cur is

3 select * from t_ref;

4 type rec is table of t_ref%rowtype;

5 recs rec;

6 begin

7 open cur;

8 while (true) loop

9 fetch cur bulk collect

10 into recs limit 100;

11 forall i in 1 .. recs.count

12 insert into t values recs (i);

13 commit;

14 exit when cur%notfound;

15 end loop;

16 close cur;

17 end;

18 /

elapsed: 00:00:09.75

此時我們僅僅使用了不到10秒的時間就完成了曾經需要幾分鐘才能完成的任務。

在oracle資料庫中,頻繁的commit會引起大量redo log的物理i/o,會極大的限制資料庫的效能。因此,為提高資料庫效能,盡可能的批量提交。

oracle有很多優秀的方法值得嘗試。

oracle批量提交

create or replace procedure p cust bossorder sync is 存放t iiss boss order back是否存在 v tablecount number 2 0 定義變數 type v bossorder row is table of t cust...

批量 獲取編輯列表及提交

批量編輯列表 批量編輯提交 public string edititemsallsubmit itemsqueryvo itemsqueryvo throws exception 2.springmvc註解開發 validation校驗 商品修改校驗 編輯提交 呼叫service更新商品資訊,頁面需...

spring ibatis 批量提交資料

在系統中,提取資料迴圈計算後,每次需要有大概3000條左右的資料需要提交到資料庫。以前在迴圈中單條插入,開始只有200條左右的資料,看不出效能上的問題,現在資料量增長了很多,所以需要對提交功能做一下優化。spring整合了ibatis的批量提交的功能,我們只要呼叫api就可以了 首先在你的dao中需...