分类:
js
千万级数据更新
常规方法直接使用update来更新字段。
--t1表新增字段B alter table t1 add ( B varchar2(32)); --将t2表的字段C更新到t1表的B列中 update t1 set B = (select C from t2 where t1.A = t2.A);
在数据量较少的时候,这种写法是没问题的,简洁易懂。但是数据量太大的情况则不适用,在测试环境实际跑了一下,一个小时都没更新完,是否有其他方法呢。
使用MERGE
merge into是oracle内置函数,通常用来处理insertOrUpdate的需求,如果存在数据就update,如果不存在就insert。也可以只用来更新,速度很快。
--t1表新增字段B alter table t1 add ( B varchar2(32)); --通过merger的方式,将B表的column3字段更新到A表的column2列中 merge into t1 Using (select * from t2 ) on (t1.A = t2.A) when matched then update set t1.B = t2.C
merge into 同时支持sql server,通过这种方式,在测试环境实际跑下来十分钟左右可以更新完成。
使用CTAS
create table as 的方式在之前的使用中,多用于创建备份表。因为这次需求才认识到其更多的用法。性能十分强悍。
--首先使用ctas的方式创建临时表 create table temp_A as select t1.*,t2.C from t1 left join t2 on t1.A = t2.A; --删除原始表 drop table A; --将临时表重名称 rename temp_A to A; --重新创建原表的索引等。。。 create index ......
这个速度更快
评价
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术