我的表有数百万条记录,并且添加了两个新列
alter table hr.employees add (ind char(1Byte), remove Char(1 Byte)); commit;
我有另一个视图hr.department
,它的数据比这多,并且具有这两列。
因此,如果我为这些记录编写和更新,则需要花费很长时间。
update hr.employees a
set (ind, remove) =(select ind, remove
from hr.department b
where a.dept_id = b.dept_id ) ;
距离更新还有一个小时了。有人可以帮忙吗?
答案 0 :(得分:3)
如果表有数百万行,则使用UPDATE
很可能会花费太多时间。
我将重命名旧表,使用已经填充的新列创建一个新表,然后添加索引,约束,注释并收集统计信息。
RENAME employees to employees_old;
CREATE TABLE employees AS
SELECT a.col1, a.col2, ... a.coln, b.ind, b.remove
FROM employees_old a
LEFT JOIN department b
ON a.dept_id = b.dept_id;
答案 1 :(得分:-1)
处理此更新的最简单方法可能是:
与往常一样,伯乐森咨询公司是一个很好的资源:http://www.dba-oracle.com/t_efficient_update_sql_dml_tips.htm