当前位置: 首页 > 面试题库 >

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

冯永长
2023-03-14
问题内容

我有一个包含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作为数据库

谢谢。


问题答案:

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

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

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

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

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



 类似资料:
  • 我有两个结构相同的表,我想使用另一个表的数据更新一个表,匹配主键。SQLite有一个with(CTE)语句,但以下语句不起作用(sqlite3 v.3.29.0): 我尝试过使用“选择main.ID作为ID,选择temp.Desc作为Desc”,但得到了相同的错误消息。

  • 一、简介 方便用户在设置URL规则时更新url,无需手动去更新各页面URL。只需选择就能批量更新URL即可。 二、功能演示 1.批量更新URL 1、仅当内容页URL规则发上变化时,请批量更新,地址未改变时,不需要更新 。 2、规则设置:设置 > 相关设置 > 管理栏目 > 添加或修改栏目 选择需要更新的模型和栏目,输入每轮更新的信息数目提交则完成批量更新URL操作。如下图所示:

  • 一、简介 主要用来操作黄页模块的相关更新操作 ! 1、仅当启用、关闭伪静态时,请批量更新所有链接地址,除此,不需要更新 。 2、启用伪静态在模块配置里。 3、更新企业URL,只需选中企业库模型即可,不必选分类。 二、功能演示

  • 我使用的是Play framework 1.2.5和Play-Morphia模块。我想知道是否有一种方法可以在一个Morphia查询中更新许多对象。我在https://github.com/greenlaw110/play-morphia/blob/master/documentation/manual/crud.textile中找到了这个示例,但是我似乎不能在norder中使用“in”操作来查找

  • 问题内容: 有没有办法在续集中进行批量追加。另外,我可以指定用于检查重复项的键吗? 我尝试了以下操作,但没有成功: 批量创建效果不错。上面的语句总是在数据库中创建新条目。 问题答案: 来自官方sequelizejs参考。 可以通过使用该选项来完成。 例如这样: 是一个字段数组,当主键(或可能是唯一键)与行匹配时将更新。确保您的模型中至少有一个唯一字段(让我说id),这两个字段中都包含upsert。

  • 问题内容: 我有一个具有主键和称为的列的270k行数据库,并且我有一个带有Mid和值的文本文件。现在,我想更新表,以便将每个值分配给正确的中间值。 我当前的方法是从C#中读取文本文件,并为读取的每一行更新表中的一行。必须有一种更快的方式来做我感觉到的事情..有什么想法吗? 编辑:表中还有其他列,所以我真的需要根据中点 更新 的方法。 问题答案: 您可以使用SQL Server导入和导出向导: ht