【发布时间】:2018-06-02 21:42:21
【问题描述】:
我必须更新大约有 9300 万条记录的表,开始时数据库每 5 秒更新 10k 条记录,现在更新了大约 6000 万条记录后,更新下 10k 条记录需要 30-60 秒,不知道为什么我必须更新为空的列。
我使用循环提交每 10 k 条记录:
LOOP
UPDATE TABLE
SET DATE_COLUMN = v_hist_date
WHERE DATE_COLUMN IS NULL
AND ROWNUM <= c_commit_limit
AND NOT_REMOVED IS NULL;
EXIT WHEN SQL%ROWCOUNT = 0;
COMMIT;
END LOOP;
你有什么想法为什么它变慢了,以及如何加快这个更新速度?
【问题讨论】:
-
是的,它是 PL/SQL 代码的一部分
-
为什么?我有空值的列,当它将全部更新时,它将在更新返回 0 行时退出,它在较小的表上工作,例如1-2 百万条记录,花费的时间少得多,但也有更新的数据库版本
标签: oracle optimization plsql sql-update query-optimization