db2 中的批量更新比单个更新快吗?

Nac*_*ate 2 sql database db2

我有一个包含 10 列的表,在该表中我有数千/数百万行。在某些情况下,我想一次更新超过 10K 条记录。目前我的场景代码按顺序工作,

for i in (primary key ids for all records to be updated)
     executeupdate(i)
Run Code Online (Sandbox Code Playgroud)

我认为不是运行相同的查询 10K 次,而是将所有 id 添加到一个字符串中并运行一个更新查询,例如,

executeupdate(all ids) 
Run Code Online (Sandbox Code Playgroud)

实际的数据库查询可以是这样的,

假设我有像这样的主键 ID,

10001,10002,10003,10004,10005
Run Code Online (Sandbox Code Playgroud)

所以在第一种情况下我的查询会像

update tab1 set status="xyz" where Id="10001"
update tab1 set status="xyz" where Id="10002"
update tab1 set status="xyz" where Id="10003"
update tab1 set status="xyz" where Id="10004"
update tab1 set status="xyz" where Id="10005"
Run Code Online (Sandbox Code Playgroud)

我的批量更新查询将是这样的,

update tab1 set status="xyz" where id in ("10001","10002","10003","10004","10005")
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,我是否会通过批量更新获得任何性能改进(执行时间),或者总查询执行时间将与每个记录索引扫描和更新发生的时间相同?

注意:我使用 DB2 9.5 作为数据库

谢谢。

Gor*_*off 5

通常,无论数据库如何,“批量”更新都会更快。当然,你可以测试一下两者的性能,然后反馈。

update就处理查询、在表/页/行上设置锁而言,每次调用都需要大量开销。执行单个更新整合了这种开销。

单一的缺点update是它总体上可能更快,它可能会在更长的时间内锁定底层资源。例如,单次更新可能每次需要 10 毫秒,其中 1,000 次更新需要 10 秒的时间。但是,没有资源被锁定超过 10 毫秒。批量更新可能需要 5 秒,但在此期间的更长时间内,资源将被锁定。

为了加快这些更新,请确保id已编入索引。

我应该注意。这是一般原则。我没有专门测试 DB2 上的单更新和多更新性能。