我有一个信息映射,其中软删除条件如下:
Pk_Src is null and Pk_Tgt is not null then set the active_flag to N.
现在根据这个条件,映射评估了有400k记录需要更新。它是一个简单的更新,但使用更新策略需要3个多小时
感谢您的宝贵意见。
地塞米松。
答案 0 :(得分:0)
表上有多少条记录,active_flag出现了多少索引?如果active_flag在许多索引中,那么您应该考虑在会话开始之前删除这些索引,并在会话结束后重新定义它们。您是否查看了会话日志以查看哪些步骤需要时间?更新查询旁边可能还有更多内容。另一种尝试的策略是将提交间隔增加到500000(只要您的数据库撤消可以承受这一点)
答案 1 :(得分:0)
一般来说,在从infa映射进行更新/删除时,您应该会遇到非常慢的性能。比插入物慢10-100倍。这是因为没有基于“阵列”的更新/删除,因此每个更新都需要单独和顺序处理,如果时间花费90%来回发送握手,最终会出现90%的情况。对于插入,仅针对每个“数组大小”记录(例如10000)进行握手,因此开销可以忽略不计。
到目前为止,我找到的最佳解决方案是:
Delete from TABLE where Exists (select * from STAGE where TABLE.ID=STAGE.ID)
我希望你能跟着我