MySql中数据表增加字段很慢问题及解决

 更新时间:2024年04月11日 09:16:07   作者:狮子君的石榴  
这篇文章主要介绍了MySql中数据表增加字段很慢问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

MySql数据表增加字段很慢

由于数据库表中有大量数据,导致给表添加字段就会很慢。

所以,对于数据量很大的表,需要添加所有或者修改字段的做法是如下:

1.先创建一张一样的表

create table new_tb like tb_old;

2.修改创建表的字段

alter table new_tb add COLUMN new_column varchar(32) DEFAULT null;

3.原始数据插入到新的数据表中

insert into new_tb (字段) select 字段 from tb_old;

这里需要注意下,你的insert字段和你查询出来的字段一致,对应顺序也是需要一致的,如果你只是修改字段的属性,或者添加了索引之类的,字段数量没用变话,那么直接这样写

insert into new_tb select * from tb_old;

4.删除原来的数据表,并且重新命名新的数据表:

drop table tb_old;
alter table new_tb rename to tb_old;

MySql大表加字段问题

场景

现在 有个数据量大概40亿的数据,存在10个库,总计80张表上面,每个表大概5000万的数据量,

这个表通过一个MQ接口不断地接收数据,每天大概新增或更新数据量是几十万。

现在,需要在在这个表上加个新字段X,而且都有初始值,都存储在对方系统的数据库里。而他们这个新的字段一直就有。只是我方系统一直以来没有接这个字段。

注意:加字段期间不能影响原有的查这张表的业务的使用。

问:如何新增。

首先,肯定不能在表上面直接加字段,数据量太大,直接加字段,sql一夜都跑不完。而且会影响查询业务的使用

方案如下

  • 第一步,我们同样的数据库的位置,在老表的_old下方创建新表_new ,字段结构完全一样,只是多了新字段X。
  • 第二步,让对方系统把老的40亿数据推到hive上面,做准备,时间节点记为1月1日零时,大概三天推上去;
  • 第三步,在此之前,建立一个新接口,一个临时表new_temporary从1月1日零时,就开始接数据到临时表;
  • 第四部,启动拉数据任务流,每天半夜从hive拉数据,拉倒新表new,拉的时候记得max_binlog_cache_size 改大,不然一次入库会撑爆,大概10天左右拉完,截止时间1月15日零时。(这个时间节点要用)
  • 第五步,拉数据完毕后,启动一个定时任务,把从临时表new_temporary接收的数据,更新到新表_new。更新条件是,只对数据库更新时间是 1月15日零时之前的数据做更新
  • 第六步,同时切换接口开关,关闭接临时表的接口,打开接新表接入数据的接口。同时入老表old的接口也不能关,预防漏发数据随时切回来。
  • 第七步,修改系统中所有查询老表old查询方法,改成查询新表,用redis加上开关。上线功能。
  • 第八步,打开开关,使用新表,若有漏发数据(少量),这提醒对方系统补发数据,逐步补全数据,
  • 第九步,等系统运行平稳以后,关掉接老表old数据的接口,删除临时表new_temporary,删除老表_old

感悟:

本来加一个字段不算太大的事,可是因为数据量大,又要保证可用性,所以还是需要一套方案来做这个事情。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 一个字段同时满足多个条件的查询

    一个字段同时满足多个条件的查询

    当一个字段需要同时等于多个值的时候,用and直接连不会有数据查出。
    2011-08-08
  • MySQL删除了记录不生效的原因排查

    MySQL删除了记录不生效的原因排查

    这篇文章主要介绍了MySQL删除了记录不生效的原因排查,帮助大家解决MySQL删除语句不生效的问题,感兴趣的朋友可以了解下
    2020-11-11
  • MySQL中多表查询分类及七种JOIN操作的实现方法详解

    MySQL中多表查询分类及七种JOIN操作的实现方法详解

    MySQL的多表查询是数据库操作中的重要组成部分,它允许我们从多个相关表中获取数据,合并成一个单一的结果集,这篇文章主要介绍了MySQL中多表查询分类及七种JOIN操作实现的相关资料,需要的朋友可以参考下
    2025-09-09
  • MySQL删除表的三种方式(小结)

    MySQL删除表的三种方式(小结)

    这篇文章主要介绍了MySQL删除表的三种方式(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 两大步骤教您开启MySQL 数据库远程登陆帐号的方法

    两大步骤教您开启MySQL 数据库远程登陆帐号的方法

    在工作实践和学习中,如何开启 MySQL 数据库的远程登陆帐号算是一个难点的问题,以下内容便是在工作和实践中总结出来的两大步骤,能帮助DBA们顺利的完成开启 MySQL 数据库的远程登陆帐号。
    2011-03-03
  • mysql中的各种约束条件深入探讨

    mysql中的各种约束条件深入探讨

    在mysql中对编辑的数据进行类型的限制,不满足约束条件的报错,本文给大家分享mysql中的各种约束条件,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-05-05
  • MySQL 丢失数据的原因及解决

    MySQL 丢失数据的原因及解决

    这篇文章主要介绍了MySQL 丢失数据的原因及解决,帮助大家更好的理解和学习使用MySQL数据库,感兴趣的朋友可以了解下
    2021-05-05
  • 21条MySQL优化建议(经验总结)

    21条MySQL优化建议(经验总结)

    这篇文章主要介绍了21条MySQL优化建议,均来自个人的实战经验总结,需要的朋友可以参考下
    2014-07-07
  • MySQL中触发器的基础学习教程

    MySQL中触发器的基础学习教程

    这篇文章主要介绍了MySQL中触发器的基础学习教程,包括对触发器的创建和管理等基本知识,着力推荐!需要的朋友可以参考下
    2015-12-12
  • MySQL5.7 mysqldump备份与恢复的实现

    MySQL5.7 mysqldump备份与恢复的实现

    这篇文章主要介绍了MySQL5.7 mysqldump备份与恢复的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论