关于MySQL大数据量,依据外键进行数据更新的操作。

针对业务主表与从表的数据同步需求,探讨了三种不同方案的优劣:直接使用UPDATE语句、通过存储过程逐条更新,以及创建新表结构进行整体替换。结论指出,在处理百万级别数据时,第三种方案更为高效。

背景介绍

存在业务主表a, 包含大量字段 a_1,a_2,a_3... 。

存在从表b,包含外键(主表主键 a_1) 和业务属性 a_3,a_6,a_9。

由于从表b需要增加业务主表的a_11。将表b增加一列 b_11,其列内容需要从主表a_11中更新。

增加业务主表的a_12。将表b增加一列 b_12,其列内容需要从主表a_12中更新。

...

表a,b都是百万级别的数据。

 

解决方案有

1、使用update 语句

update b set b_11 = (select a_11 from a where a.a_1 = b.b_1), b_12 = (select a_12 from a where a.a_1 = b.b_1 )

2、使用存储过程

通过 select ... from a 的游标,将值赋给变量v_N

循环更新b表

update b set b_11 = v_11 ,b_12 = v_12 where b_1 = v_1;

3、创建b的结构表 b2(高效)

insert into b2 select b.b_1,b.b_2,a.a_1... from a join b where b_1 = a_1

然后将b表改名为b3, b2改名为b。 

 

结论

解决方案3会非常高效,因为MySQL对于大数据量的记录,更新操作会非常缓慢。对于大数据量的表,更新操作一般采用先删除,后添加新记录的方式来实现更新操作。

解决方案3有效的利用,新建代替更新的操作,实现效率上的提升。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值