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

背景介绍

存在业务主表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有效的利用,新建代替更新的操作,实现效率上的提升。

发布了129 篇原创文章 · 获赞 20 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/Bof_jangle/article/details/104175101