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優化儲存過程
- 儲存過程優化(DBMS_HPROF)儲存過程優化
- Oracle儲存過程Oracle儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- Oracle儲存過程-1Oracle儲存過程
- oracle的儲存過程Oracle儲存過程
- Oracle儲存過程例子Oracle儲存過程
- Oracle建立儲存過程Oracle儲存過程
- oracle plsql儲存過程OracleSQL儲存過程
- ORACLE 儲存過程示例Oracle儲存過程
- pl/sql儲存過程優化一例SQL儲存過程優化
- .NET Core中使用Dapper操作Oracle儲存過程最佳實踐APPOracle儲存過程
- mysql儲存過程及日期函式實踐MySql儲存過程函式
- 從sybase的儲存過程轉向oracle的儲存過程儲存過程Oracle
- 實戰儲存過程排程過程儲存過程
- oracle儲存過程許可權繼承小結Oracle儲存過程繼承
- oracle10g_儲存過程學習小記Oracle儲存過程
- oracle plsql儲存過程_運算子優先順序OracleSQL儲存過程
- mysql儲存過程小試牛刀MySql儲存過程
- 編寫和優化SQL Server的儲存過程優化SQLServer儲存過程
- 儲存過程編寫經驗和優化措施儲存過程優化
- 原創:oracle 儲存過程Oracle儲存過程
- oracle 儲存過程批次提交Oracle儲存過程
- oracle 儲存過程學習Oracle儲存過程
- [Flashback]Oracle flashback儲存過程Oracle儲存過程
- Oracle儲存過程學習Oracle儲存過程
- oracle的儲存過程格式Oracle儲存過程
- java 呼叫oracle 儲存過程JavaOracle儲存過程
- oracle--08儲存過程Oracle儲存過程
- 【實戰】oracle job + 儲存過程 的使用示例Oracle儲存過程
- c#呼叫儲存過程小記C#儲存過程
- oracle儲存過程書寫格式Oracle儲存過程
- Oracle Pl/SQL 之 儲存過程OracleSQL儲存過程
- C#呼叫 oracle儲存過程C#Oracle儲存過程
- Oracle儲存過程基本語法Oracle儲存過程
- [Procedure]Oracle之分頁儲存過程Oracle儲存過程
- oracle 儲存過程遊標的使用Oracle儲存過程
- C#呼叫Oracle儲存過程C#Oracle儲存過程