小编典典

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

sql

我有一个包含10列的表格,在该表格中,我有成千上万的行。在某些情况下,我想一次更新超过1万条记录。目前,我的方案代码按顺序运行,

for i in (primary key ids for all records to be updated)
     executeupdate(i)

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

executeupdate(all ids)

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

假设我有主键ID,例如

10001,10002,10003,10004,10005

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

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"

我的批量更新查询将像

update tab1 set status="xyz" where id in ("10001","10002","10003","10004","10005")

所以我的问题是,通过批量更新可以提高性能(执行时间),还是总查询执行时间与每次记录索引扫描发生并进行更新一样?

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

谢谢。


阅读 283

收藏
2021-04-14

共1个答案

小编典典

通常,无论数据库如何,“批量”更新都将更快。当然,您可以测试两者的性能,然后进行报告。

update就处理查询,在表/页/行上设置锁而言,每次调用都需要大量开销。进行单个更新将合并此开销。

单一的缺点update是总体上可能更快,
可能会锁定基础资源更长的时间。例如,单个更新可能每个花费10毫秒,其中1,000个花费10秒钟的时间。但是,没有任何资源被锁定超过10毫秒。批量更新可能需要5秒钟,但是在此期间,资源将被锁定。

为了加快这些更新的速度,请确保已将id其编入索引。

我要注意 这是一般原则。我还没有专门测试DB2的单次更新性能与多次更新性能。

2021-04-14