首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新oracle中的数百万行

更新oracle中的数百万行
EN

Stack Overflow用户
提问于 2016-06-09 04:10:16
回答 2查看 3.1K关注 0票数 0

我正在尝试更新500万行。下面的查询在5-6分钟内运行。但我希望有500000条记录之间的定期提交。我该怎么做?

任何帮助都是非常感谢的。

谢谢

代码语言:javascript
复制
DECLARE
   a   NUMBER;
   BEGIN
   UPDATE table1
    SET (name) =
         (SELECT name
            FROM table1
           WHERE     a1= 24672

   WHERE ROWNUM <= 6500000;

   a := SQL%ROWCOUNT;
   DBMS_OUTPUT.put_line (a || ' Rows Updated');
END;
/
EN

回答 2

Stack Overflow用户

发布于 2016-06-09 15:36:23

既然你已经标记了这个“优化”,我假设你关心的是性能。虽然您可以用PL/SQL重写SQL,使用循环并每n次迭代提交一次,但这会减慢您的速度。

更新数百万行的最快方法通常是根本不更新。相反,您可以创建一个新表(CREATE table ...因为..。选择),删除旧表,然后重命名新表。它减少了重做和撤消的数量,并极大地提高了性能。

请参阅How to update millions of rows

如果性能足够好,那么您可能不再关心部分提交?

票数 2
EN

Stack Overflow用户

发布于 2016-06-09 06:31:35

你可能会做类似这样的事情。

代码语言:javascript
复制
DECLARE
   a   NUMBER;
   commitCt NUMBER;
   rowCt NUMBER;

   BEGIN
      LOOP
         commitCt := 0;
         rowCt := 0;
         SAVEPOINT svePoint;

     WHILE rowCt/500000 <= 1
     LOOP
       BEGIN
           rowCt := rowCt + 1;



           commitCt := commitCt + 1;

       EXCEPTION
         WHEN OTHERS THEN
           ROLLBACK to svePoint;
       END;

      END LOOP;

     COMMIT;

     IF commitCt = 0 THEN
        EXIT;
     END IF;

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

https://stackoverflow.com/questions/37712011

复制
相关文章

相似问题

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