我正在使用oracle中的MERGE語句對數百萬條記錄進行批量插入/更新。那麼,其他選項可能是使用FORALL使用BULKCOLLECT,然後提交,但此操作將再次減慢性能,因爲我需要保持循環。 在整個合併操作完成後提交將是一個性能問題,我想知道如何將合併語句中的提交頻率設置爲10000行插入/更新(如批量提交)。如何在Oracle Merge Statement中指定批量提交?
1
A
回答
3
MERGE語句是一個單一語句,因此根據定義它不能跨越事務。 (ACID中的A代表原子性)
如果您沒有對源表和目標表的合併標準(ON子句)的索引,將單個MERGE語句轉換爲N個合併語句將要運行速度明顯較慢,因爲當您針對源和/或目標進行單次掃描時,您將會執行其中的N個掃描。如果您認爲一次全表掃描速度很慢,請嘗試每百萬行做100次!
說實話,拿刀砍你的單一合併到多個語句將是慢,因爲更多的工作正在做 - 你運行多個語句,因此有更多的分析開銷,您要執行更多的提交,所以會有更多的序列化,因爲當執行提交時你的程序正在等待。將單一語句劃分爲多個單詞的唯一好理由是,如果您有可恢復性問題(噢,不!工作失敗三個小時,我們只有四個小時的時間!),或者如果事務管理開銷(UNDO和ORA-01555 )成爲一個問題。
如果您在此過程中擁有CPU可用性,那麼您可能希望考慮對您的MERGE語句使用PARALLEL提示以查看它是否運行得更快。同樣,如果您的MERGE語句僅影響目標表中的一小部分行,則可能是合併的列上的索引會提高性能。
-1
您無法對單個合併語句進行批量提交。
相關問題
- 1. jOOq MERGE在Oracle中
- 2. 提交如何在Oracle
- 3. 如何獲取小批量提交Git
- 4. 在R中提交批量時出錯
- 5. PBS批量作業提交
- 6. Oracle MERGE死鎖
- 7. 大批量提交形式
- 8. 如何在Oracle數據庫中提交「提交前」觸發器
- 9. 在oracle中批量收集
- 10. 獲取mule批量提交中提交記錄數的計數
- 11. 如何在解析和提交之前記錄從'git merge'引入的提交?
- 12. Oracle批量作業,如何防止鎖
- 13. 如何在Github上批准提交
- 14. Progressive LOOP Statement ORACLE
- 15. SQL ORACLE MERGE表
- 16. 批錯誤指定變量?
- 17. 來自外部數據源的Oracle MERGE
- 18. jQuery驗證在指定div中提交
- 19. TortoiseSVN提交失敗:MERGE失敗
- 20. git merge squash非連續提交
- 21. 撤銷git merge幾次提交前
- 22. Oracle中的Java Prepared Statement catsearch
- 23. 如何在Bootstrap表中指定提交搜索文本的URL
- 24. 指定按鈕提交
- 25. git merge缺少幾次提交
- 26. 如何從Oracle批量下載數據?
- 27. git-merge-base只返回一個提交
- 28. git merge添加了大量的提交信息
- 29. oracle批量插入
- 30. Lucene索引的批量提交
亞當,非常感謝您的有價值的答案! – spaceman