繁体   English   中英

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

[英]Update Program Name - Multi Million Records

我需要更新帐户表中的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;

然后提交?

您非常接近:

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

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

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

  2. 添加一个条件来过滤名称为<>'NEW PROGRAM NAME'的记录

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

  4. 如果可以更改数据库设计,则应执行数据库规范化。 创建一个表“程序”以存储程序和名称,表“帐户”仅存储字段程序,以便您只需更新表“程序”中的记录之一

     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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM