首页 > 数据库 > 数据库开发技术 > 大表update例子比较
测试表a_tmp,1百万条数据,增加一个column
ALTER TABLE A_TMP ADD dt DATE
给a_tmp的dt Update入date数据。尝试了几种方法,均不理想,最后使用merge,迅速update成功。
[@more@]1、
declare
aa integer :=100;
dd date;
begin
dd := TO_DATE('20000101','yyyymmdd');
loop
aa := aa + 2;
dd := dd + 1/24
update a_tmp set dt = dd where a = aa;
---commit;
exit when aa > 1000000;
end loop;
end;
运行10分钟,没有结果,中断。
2、
UPDATE A_TMP tt SET tt.dt = (
SELECT TO_DATE('20000101','yyyymmdd')+ta.rn/24 FROM ( SELECT ROWID rd, ROWNUM rn FROM A_TMP) ta
WHERE tt.ROWID = ta.rd
);
运行10分钟,没有结果,中断。
3、
MERGE INTO A_TMP tt
USING ( SELECT ROWID rd,ROWNUM rn FROM A_TMP ) ta
ON ( tt.ROWID = ta.rd)
WHEN MATCHED THEN
UPDATE SET tt.dt = TO_DATE('20000101','yyyymmdd')+ta.rn/24;
运行3分钟成功。
Merge 使用多线方式,提高update效率。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/640706/viewspace-1026170/ ,如需转载,请注明出处,否则将追究法律责任。