17,377
社区成员
发帖
与我相关
我的任务
分享
a.CustomerID=b.CustomerID
and a.Vparameters=b.Vparameters
update a set a.is_pay=(select b.is_pay from b
where b.CustomeriD=a.CustomerID
and b.Vparameters=a.Vparameters)
--由于a,b两张表都有三千万条数据,这样写肯定要更新一晚上,请问有什么好的写法
--method1:
create table tmp
as
select a.CustomerID,a.Vparameters,case when b.is_pay is null then a.is_pay else b.is_pay end is_pay
from a
left outer join b
on b.CustomeriD=a.CustomerID
and b.Vparameters=a.Vparameters;
drop table a;
create table a
as
select * from tmp;
--method2:
merge into a
using b
on (b.CustomeriD=a.CustomerID
and b.Vparameters=a.Vparameters)
when matched then
update set a.is_pay=b.is_pay;
--如果此表建索引了,可以在更新操作前,删除索引,更新完成后,在重建索引。
update t1 set t1.is_payt2.is_pay
from a t1,b t2
where t1.CustomeriD=t2.CustomerID and t1.Vparameters=t2.Vparameters
--也可以使用分区技术,对多个分区并行update操作以提升效率,但是系统的压力也会随之增大。