【发布时间】:2014-02-27 12:37:26
【问题描述】:
我有一个包含 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 作为数据库
谢谢。
【问题讨论】:
-
DB2/z? DB2/LUW? DB2/i?该数据库在许多平台上运行。
-
DB2/LUW 是我正在使用的。
-
如果您处理的是 range 的 ids(并且主要将数据更新为相同的值),您可以让它变得更简单;
UPDATE tab1 SET status = "xyz" WHERE id >= '10001' AND id < '10006'。或者,如果该列表以前是从其他条件或查询中收集的。你是如何获得 id 列表的?