日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 批量提交_【INSERT】逐行提交、批量提交及极限提速方法

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 批量提交_【INSERT】逐行提交、批量提交及极限提速方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

1.創建表t_ref,并初始化880992條數據,用于后面的實驗。

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.

2.編寫一個簡單的PL/SQL塊來模擬逐行提交的情況,注意觀察執行時間。

我們的目標是將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秒。

3.再來模擬批量提交的情況。

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應該盡量以批量提交的方式來完成工作。

4.最后我們使用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秒的時間就完成了曾經需要幾分鐘才能完成的任務。

5.小結

在Oracle數據庫中,頻繁的COMMIT會引起大量Redo Log的物理I/O,會極大的限制數據庫的性能。因此,為提高數據庫性能,盡可能的批量提交。

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

Good luck.

-- The End --

總結

以上是生活随笔為你收集整理的java 批量提交_【INSERT】逐行提交、批量提交及极限提速方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。