批量載入效能案例
客戶在大量載入資料是遇到效能問題,檢查後發現客戶採用的是單條插入單條提交這種最緩慢的方式,為了給客戶說明優化效果,現場做了幾個程式碼。
最簡單的優化方式莫過於減少COMMIT頻度,而最優化的方式是採用批量插入的方式,簡單的測試程式碼如下:
SQL> CREATE TABLE T_INSERT (ID NUMBER, NAME VARCHAR2(30));
Table created.
SQL> SET TIMING ON
SQL> BEGIN
2 FOR I IN 1..100000 LOOP
3 INSERT INTO T_INSERT VALUES (I, 'A' || I);
4 COMMIT;
5 END LOOP;
6 END;
7 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:05.22
SQL> BEGIN
2 FOR I IN 1..100000 LOOP
3 INSERT INTO T_INSERT VALUES (I, 'A' || I);
4 COMMIT;
5 END LOOP;
6 END;
7 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:05.51
SQL> BEGIN
2 FOR I IN 1..100000 LOOP
3 INSERT INTO T_INSERT VALUES (I, 'A' || I);
4 IF MOD(I, 1000) = 0 THEN
5 COMMIT;
6 END IF;
7 END LOOP;
8 COMMIT;
9 END;
10 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:04.01
SQL> BEGIN
2 FOR I IN 1..100000 LOOP
3 INSERT INTO T_INSERT VALUES (I, 'A' || I);
4 IF MOD(I, 1000) = 0 THEN
5 COMMIT;
6 END IF;
7 END LOOP;
8 COMMIT;
9 END;
10 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:02.64
SQL> DECLARE
2 TYPE T_NUM IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3 TYPE T_VAR IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
4 V_NUM T_NUM;
5 V_VAR T_VAR;
6 BEGIN
7 FOR I IN 1..100000 LOOP
8 V_NUM(I) := I;
9 V_VAR(I) := 'A' || I;
10 END LOOP;
11 FORALL I IN 1..100000
12 INSERT INTO T_INSERT VALUES (V_NUM(I), V_VAR(I));
13 COMMIT;
14 END;
15 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.37
SQL> DECLARE
2 TYPE T_NUM IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3 TYPE T_VAR IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
4 V_NUM T_NUM;
5 V_VAR T_VAR;
6 BEGIN
7 FOR I IN 1..100000 LOOP
8 V_NUM(I) := I;
9 V_VAR(I) := 'A' || I;
10 END LOOP;
11 FORALL I IN 1..100000
12 INSERT INTO T_INSERT VALUES (V_NUM(I), V_VAR(I));
13 COMMIT;
14 END;
15 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.50
這個例子明確說明了單條提交、批量提交以及數值插入的效能差異,很多時候只是口頭上的描述,客戶不會有太深的印象,而如果通過這種例子來展示效能的差別,結果一目瞭然,比再多的描述都管用得多。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-713816/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 前端效能優化 --- 懶載入&預載入前端優化
- Docker批量操作(啟停、刪除、歸檔、載入)Docker
- MySQL批量更新死鎖案例分析MySql
- python 批量resize效能比較Python
- WPFDataGrid效能載入大資料大資料
- 前端效能優化——延遲載入和非同步載入前端優化非同步
- 【轉載】QP02檢驗計劃批量匯入
- 效能改進之專案例會匯入實踐
- React 16 載入效能優化指南React優化
- Redis效能提高之批量和管道Redis
- qq相簿批量下載
- 效能提升 48 倍! python redis 批量寫入大量資料優化過程PythonRedis優化
- 批量機器登入
- Django效能最佳化:提升載入速度Django
- 頁面載入效能之優化LCP優化
- 批量下載SRR資料
- iOS效能優化之頁面載入速率iOS優化
- VUE系列之效能最佳化--懶載入Vue
- JVM效能最佳化 —— 類載入器,手動實現類的熱載入JVM
- Java爬蟲之批量下載LibreStock圖片(可輸入關鍵詞查詢下載)Java爬蟲REST
- 使用 Webapck 優化 VS Code 外掛載入效能Web優化
- python批量下載馬拉松照片Python
- 使用IDM批量抓取音效素材下載
- 魅族雲相簿批量下載方案
- iOS效能優化 - 網路圖片載入優化iOS優化
- Python批量匯入Excel資料到MySQLPythonExcelMySql
- Laravel- 後臺批量匯入 ExcelLaravelExcel
- PostgreSQL批量、單步寫入-row,statement觸發器(中間表)、CTE幾種用法效能對比SQL觸發器
- [譯] Netflix 的 Web 效能案例研究Web
- QQ空間相簿批量下載【原圖】
- AD 批量匯入使用者(利用 for……do……dsadd user 批量建使用者)
- kafka入門案例Kafka
- vuex入門案例Vue
- Python入門(案例)Python
- RabbitMQ入門案例MQ
- 網頁效能優化之非同步載入js檔案網頁優化非同步JS
- 前端效能優化:細說JavaScript的載入與執行前端優化JavaScript
- 效能更優越的小程式圖片懶載入方式
- WPF效能最佳化示例:使用VirtualizingStackPanel提升介面載入速度