首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Oracle Merge语句中指定批提交?

如何在Oracle Merge语句中指定批提交?
EN

Stack Overflow用户
提问于 2010-02-16 20:59:10
回答 2查看 7.9K关注 0票数 1

我正在使用oracle中的merge语句对数百万条记录进行批量插入/更新。好的,其他选项可以是使用FORALL,利用BULKCOLLECT,然后提交,但这个操作将再次降低性能,因为我需要保持循环。在完成整个合并操作后提交将会影响性能,我想知道如何在merge语句中为每10000行插入/更新操作(比如批量提交)设置提交频率。

EN

回答 2

Stack Overflow用户

发布于 2010-02-16 23:44:53

MERGE语句是一个单独的语句,因此根据定义,它不能跨越事务。( ACID中的A代表原子性。)

如果没有针对源表和目标表的合并条件( on子句)的索引,则将单个merge语句转换为N个MERGE语句的运行速度将显著减慢,因为当您对源和/或目标执行一次扫描时,您将执行其中的N个语句。如果您认为一次全表扫描很慢,请尝试每百万行扫描100次!

老实说,随着更多的工作完成,将单个MERGE分解为更多语句的速度将会变慢--您运行更多语句,因此有更多的解析开销,并且执行更多的提交,因此将有更多的序列化,因为您的程序在执行提交时等待。将单个语句划分为多个语句的唯一好理由是,如果您有可恢复性方面的考虑(哦,不!作业在三个小时内失败了,而我们只有四个小时的窗口!)或者事务管理开销(UNDO和ORA-01555)是否成为问题。

如果此进程有可用的CPU,您可能希望考虑对MERGE语句使用并行提示,以查看它是否运行得更快。类似地,如果MERGE语句只影响目标表中的一小部分行,那么在要合并的列上建立索引可能会提高性能。

票数 4
EN

Stack Overflow用户

发布于 2013-06-05 19:54:30

不能对单个merge语句进行批提交。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2272985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档