我有一个包含 10 列的表,在该表中我有数千/数百万行。 在某些情况下,我想一次更新超过 10K 条记录。目前我的场景代码按顺序工作,
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 作为数据库
谢谢。
最佳答案
一般来说,无论数据库如何,“批量”更新都会更快。当然,你可以测试两者的性能,并反馈。
每次调用 update
都需要大量开销,比如处理查询、在表/页/行上设置锁。进行一次更新可以合并这种开销。
单个更新
的缺点是它可能总体上更快,但是它可能会锁定底层资源更长的时间。例如,单个更新可能每次需要 10 毫秒,其中 1,000 个更新耗时 10 秒。但是,没有资源被锁定超过 10 毫秒。批量更新可能需要 5 秒,但在此期间资源将被锁定更长的时间。
要加快这些更新,请确保 id
已编入索引。
我应该注意。这是一般原则。我没有专门测试 DB2 上的单一更新与多重更新性能。
关于sql - 批量更新是否比 db2 中的单个更新更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22068743/