更新程序名称 - 数百万条记录

时间:2017-01-26 02:26:25

标签: sql database performance sql-update database-performance

我需要更新帐户表中的500万行。

update account set name = 'NEW PROGRAM NAME' where progid = 1111;

但是,定期更新正在运行并运行1.5小时。我不得不取消它然后需要时间取消。这是一团糟。

我需要有关如何在尽可能短的时间内快速更新的专家建议。

我更喜欢1个剧本。但我想的可能是:

update account set name = 'NEW PROGRAM NAME' where progid = 1111 and rownum <= 500000;

然后提交?

2 个答案:

答案 0 :(得分:0)

你非常接近:

update account
    set name = 'NEW PROGRAM NAME'
    where progid = 1111 and name <> 'NEW PROGRAM NAME' and
          rownum <= 5000;

您可以重复执行此更新,并在两者之间进行提交。

答案 1 :(得分:0)

  1. 请为字段progid添加索引。

  2. 再添加一个条件来过滤名称&lt;&gt;的记录&#39;新节目名称&#39;

  3. 我不建议您通过一个脚本更新500万行。您应该每批更新5000条记录以避免行锁。

  4. 如果可以更改数据库设计,则应执行数据库规范化。创建一个表&#39;程序&#39;存储progid和名称,表&#39;帐户&#39;只存储字段progid,以便您只更新表格中的一条记录&#39;程序&#39;

    While (Select Count(1) From account Where progid = 1111 and name <> 'NEW PROGRAM NAME') > 0
    Begin
    update account
    set name = 'NEW PROGRAM NAME'
    where progid = 1111 and name <> 'NEW PROGRAM NAME' and
      rownum <= 5000; 
    End