首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >海量记录的数据库更新查询

海量记录的数据库更新查询
EN

Stack Overflow用户
提问于 2012-10-15 11:21:43
回答 1查看 235关注 0票数 1

我们在表中有大约20,80,000条记录。我们需要向其中添加新的列,并且我们添加了该列。

由于这个新列需要是主键,并且我们希望用Sequence更新所有行,因此查询如下

代码语言:javascript
复制
BEGIN
FOR loop_counter IN 1 .. 211 LOOP
update user_char set id = USER_CHAR__ID_SEQ.nextval where user_char.id is null and rownum<100000;
commit;
END LOOP;
end;

但是现在已经快完成一天了。查询仍在运行。注意:我不是db开发人员/程序员。

这个查询或任何其他查询解决方案(快速)执行相同的工作是否有问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-15 11:30:36

首先,似乎没有任何理由在这里使用PL/SQL。简单地发出一条SQL语句来更新每一行会更有效

代码语言:javascript
复制
UPDATE user_char
   SET id = USER_CHAR__ID_SEQ.nextval
 WHERE id IS NULL;

根据情况,创建新表并将数据从旧表移动到新表也可能更有效率,以避免行迁移,即

代码语言:javascript
复制
ALTER TABLE user_char
  RENAME TO user_char_old;

CREATE TABLE user_char
AS
SELECT USER_CHAR__ID_SEQ.nextval, <<list of other columns>>
  FROM user_char;

<<Build indexes on user_char>>
<<Drop and recreate any foreign key constraints involving user_char>>

如果这是一个大表,您可以在CREATE TABLE语句中使用并行性。并不是很明显,你会从一个两百万行的小型表的并行中获得很多好处,但这可能会减少几秒钟的操作时间。

其次,如果仅更新200万行需要一天的时间,那么一定有其他事情在进行。如今,200万行的表非常小--在我的笔记本电脑上,我可以在几秒钟到几分钟内填充和更新200万行表。这张桌子上有触发器吗?有外键吗?是否有其他会话更新行?查询等待的是什么?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12888864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档