1、單條SQL語句一次性的執行數據處理數據庫
2、採用遊標一條一條的逐步循環處理服務器
3、採用Oracle的BULK COLLECT程序批量處理性能
通常性的原則是:測試
若是能夠經過單條SQL實現,並且單條SQL語句的數據處理量不是很是龐大,則採用單條SQL一次性執行的方法是最好的,由於這時打開數據庫的次數和處理數據的次數都最少,操做簡單並且性能良好,那麼,這個數據量如何把握呢,最好的辦法是嘗試,看看在當前數據庫服務器資源肯定狀況下,多少數據執行起來效率最好,經驗上來說,數萬條數據用單條SQL都是沒有問題的,超過了10萬,就須要斟酌是否會消耗過多內存或者是回滾段。spa
採用遊標逐條處理數據的方法,是在單條SQL語句沒法實現數據處理狀況下的最經常使用方法,在沒必要要經過批處理來提升性能的狀況下,咱們沒有必要摒棄這種方法,而所有使用批處理。那麼,在什麼狀況下使用批處理,如何使用呢內存
1、在使用批處理效果很好時再使用它資源
有幾層含義,首先,咱們要在處理的數據量比較龐大,使用批處理能夠提升性能的狀況下才使用,至少,這個龐大的數據,是要數萬行以上的;其次,批量處理,也包含分批份量的意思,由於批量,並不意味着更多就表示更好,應該儘可能作到平衡,咱們能夠結合數據庫的內存等資源狀況,測試瞭解系統的吞吐量,若是一次處理50條數據,一次處理200條數據以及一次處理500條數據等幾種狀況相比,一次處理200條數據的性能最好,說明咱們的系統在批次處理200條數據的資源耗用時達到良好平衡。table
2、在使用ETL數據處理的狀況下,推薦使用ast
批量處理的一種主要應用是ETL數據處理,能夠經過BULK COLLECT批量實現數據的抽取,轉換和裝載操做,即便這時須要增長稍多一些的代碼,從提升性能和資源耗費等方面來說,也是很是值得的,此時數據庫會生成更少的重作數據,產生更少的內部鎖,於是節省ETL操做的時間。效率
forall:
forall i in 1..100--指明循環器的上限和下限
insert into table_name()values();
forall i in indices of row_num_tab--引用特定集合中單個元素的下標
insert into table_name()values();