Oracle儲存過程優化小實踐
【TechTarget中國原創】近日,接觸到ORACLE 儲存過程的優化問題,業務過程非常簡單。該儲存過程的主要DML操作就是UPDATE,需要根據某個條件對資料表的某個欄位進行更新,其中使用到遊標。之後寫了個測試的例子,以下具體介紹。
測試環境:
OS:WINDOWS XP +Intel(R) 2CPU(1.60GHz) + 1GB
資料庫: ORACLE10g
測試資料:10萬行
儲存過程程式碼:
CREATE OR REPLACE PROCEDURE prc_update_0 IS TYPE tab_id IS TABLE OF ROWID; CURSOR cur_sky IS SELECT ROWID FROM TBL_USER_AUTH WHERE IMSI IS NOT NULL; BEGIN OPEN cur_sky ; FETCH cur_sky BULK COLLECT INTO v_rowid ; FORALL i IN 1..v_rowid.COUNT UPDATE TBL_USER_AUTH SET MPXYZDATAE='nsofsofmslfd' WHERE ROWID = v_rowid(i); COMMIT; CLOSE cur_sky; EXCEPTION WHEN others THEN ROLLBACK; DBMS_OUTPUT.PUT_LINE('Update failed !'); END; / CREATE OR REPLACE PROCEDURE prc_update_1 IS v_rowid ROWID; CURSOR cur_sky IS SELECT ROWID FROM TBL_USER_AUTH WHERE IMSI IS NOT NULL; BEGIN OPEN cur_sky ; LOOP FETCH cur_sky INTO v_rowid ; EXIT WHEN cur_sky%NOTFOUND; UPDATE TBL_USER_AUTH SET MPXYZDATAE='nsofsofmslfd' WHERE ROWID = v_rowid; END LOOP; COMMIT; CLOSE cur_sky; EXCEPTION WHEN others THEN ROLLBACK; DBMS_OUTPUT.PUT_LINE('Update failed !'); END; / |
執行次數
時間(s) 1 2 3 4 5 6 7 8 9 10 avg
prc_update_0 5 4 4 7 4 4 8 8 4 8 5.6
prc_update_1 9 11 9 10 13 9 9 9 11 9 9.9
從以上結果可以看出:
對於遊標的迴圈,BULK COLLECT對效能的改善有很大的提高。實驗資料只有10萬行,當資料量達到千萬級的時候,執行時間的差距就非常明顯。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/241379/viewspace-691542/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle優化案例-儲存過程的優化思路(二十三)Oracle優化儲存過程
- Oracle儲存過程Oracle儲存過程
- .NET Core中使用Dapper操作Oracle儲存過程最佳實踐APPOracle儲存過程
- oracle的儲存過程Oracle儲存過程
- Oracle儲存過程-1Oracle儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- 原創:oracle 儲存過程Oracle儲存過程
- oracle儲存過程許可權繼承小結Oracle儲存過程繼承
- oracle儲存過程書寫格式Oracle儲存過程
- Sqlsugar呼叫Oracle的儲存過程SqlSugarOracle儲存過程
- LightDB/PostgreSQL 相容Oracle儲存過程SQLOracle儲存過程
- mysql儲存過程及日期函式實踐MySql儲存過程函式
- oracle儲存過程和觸發器Oracle儲存過程觸發器
- Oracle 儲存過程分頁 + Sqlsugar呼叫Oracle儲存過程SqlSugar
- ibatis呼叫oracle儲存過程(極簡版)BATOracle儲存過程
- MySQL優化---儲存過程和儲存函式-1-轉自部落格園MySql優化儲存過程儲存函式
- 小談mysql儲存引擎優化MySql儲存引擎優化
- vertica 如何實現儲存過程?儲存過程
- SQL Server儲存過程的優缺點SQLServer儲存過程
- Springboot呼叫Oracle儲存過程的幾種方式Spring BootOracle儲存過程
- Oracle 編譯儲存過程卡死解決方法Oracle編譯儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- 使用JavaScript和Python實現Oracle資料庫的儲存過程?JavaScriptPythonOracle資料庫儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- SQLSERVER儲存過程SQLServer儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- Redis儲存優化--小物件壓縮Redis優化物件
- Oracle儲存過程中定義多個遊標Oracle儲存過程
- Oracle儲存過程中跳出迴圈的寫法Oracle儲存過程
- Oracle儲存過程乾貨(二):PLSQL控制語句Oracle儲存過程SQL
- Oracle儲存過程編譯卡死的解決方法Oracle儲存過程編譯
- 小程式優化實踐優化
- JdbcTemplate調儲存過程JDBC儲存過程
- 造數儲存過程儲存過程
- 儲存過程——遊標儲存過程
- 儲存過程 傳 datatable儲存過程