Sql 从另一个表进行DB2大型更新

Sql 从另一个表进行DB2大型更新,sql,plsql,db2,sql-update,database-performance,Sql,Plsql,Db2,Sql Update,Database Performance,我有一个包含600000多行的表,称为asset。客户添加了一个新列,并希望使用另一个表中的值填充该列: ASSET TEMP | id | ... | newcol | | id | condition | --------------------- ------------------ |0001| ... | - | |0001| 3

我有一个包含600000多行的表,称为asset。客户添加了一个新列,并希望使用另一个表中的值填充该列:

ASSET                              TEMP
| id | ... | newcol |              | id | condition |
---------------------              ------------------
|0001| ... |   -    |              |0001|     3     |
如果我试图一次更新所有内容,则会超时/声称存在死锁:

update asset set newcol = (
    select condition from temp where asset.id = temp.id
    ) where newcol is null;
我绕过它的方法是一次只做100行:

update (select id, newcol from asset where newcol is null
    fetch first 100 rows only) a1
set a1.newcol = (select condition from temp a2 where a1.id = a2.id);
目前,我正在充分利用复制/粘贴工具,但我想知道一种更优雅的方法(以及更快的方法)


我曾尝试将其放入PL/SQL循环中,但似乎无法将其作为独立脚本与DB2一起使用。

这是不是可以在表上获得独占锁执行更新而不是释放锁以避免死锁?或者,在允许使用此锁的系统中,这是一种过于活跃的方式吗?不幸的是,这对于一个活动系统来说是一种实践,因此增量提交似乎是最好的方式(即使它们需要几天的时间,但它将在后台发生)。它是否都包装在事务逻辑中?如果表中有上万次读写操作,100次可能是最好的,但是如果每次只发生几百次更新,并且更新很快,那么一次应该可以轻松地执行1000次。我正在使用IBMDataStudio,它可能会以某种方式结束它。它被设置为在每条语句之后提交,我现在将它设置为使用1000行,因为这样可以加快约20%。你知道有没有一种不用包就可以使用循环的方法吗?标记为基于意见。在你的情况下,“优雅”是什么意思?对于大多数人来说,避免PL/SQL更为优雅。你已经有了正确的答案!