sql - 批量更新是否比 db2 中的单个更新更快?

标签 sql database db2

我有一个包含 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/

相关文章:

mysql - mysql中每组前N个Sql问题

php - 多类别产品市场的数据库设计

android - 即使数据库中有数据,游标也返回零

mysql - 选择在另一个字段中共享相同值的项目

mysql - 为 MySQL 中不断增长的表创建摘要表的最佳实践

java - 准备语句 setString 添加不必要的单引号到字符串

java - 为 DB2 转义 dbunit 中的保留关键字

sql - 在 SQL 中,如何删除左侧的前 3 个字符以及特定字符后右侧的所有内容

php - 使用选择更新列

sql - Oracle:结合使用 ROWNUM 和 ORDER BY 子句更新表列