我需要更新帐户表中的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;
然后提交?
答案 0 :(得分:0)
你非常接近:
update account
set name = 'NEW PROGRAM NAME'
where progid = 1111 and name <> 'NEW PROGRAM NAME' and
rownum <= 5000;
您可以重复执行此更新,并在两者之间进行提交。
答案 1 :(得分:0)
请为字段progid添加索引。
再添加一个条件来过滤名称&lt;&gt;的记录&#39;新节目名称&#39;
我不建议您通过一个脚本更新500万行。您应该每批更新5000条记录以避免行锁。
如果可以更改数据库设计,则应执行数据库规范化。创建一个表&#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