我正在尝试更新500万行。下面的查询在5-6分钟内运行。但我希望有500000条记录之间的定期提交。我该怎么做?
任何帮助都是非常感谢的。
谢谢
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;
/发布于 2016-06-09 15:36:23
既然你已经标记了这个“优化”,我假设你关心的是性能。虽然您可以用PL/SQL重写SQL,使用循环并每n次迭代提交一次,但这会减慢您的速度。
更新数百万行的最快方法通常是根本不更新。相反,您可以创建一个新表(CREATE table ...因为..。选择),删除旧表,然后重命名新表。它减少了重做和撤消的数量,并极大地提高了性能。
请参阅How to update millions of rows
如果性能足够好,那么您可能不再关心部分提交?
发布于 2016-06-09 06:31:35
你可能会做类似这样的事情。
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;
/https://stackoverflow.com/questions/37712011
复制相似问题