mysql 一张超级大表,加字段很慢怎么办

假设一张表已经有5000w数据了,现在想加一个字段,加字段特别慢,
并且加字段的同时要停服务,想问下行业上的解决方案是什么,主要还是
加字段速度特别慢的问题,如果能解决不停止服务加字段那就更好了,

希望有人能解决!,谢谢。

导出来重命名加好了,吧新的数据放进去,在替换表名,但还是要停一下服务保证新产生数据不丢失

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

  • 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;

如果含有外键约束的换,那么还需要处理下外键。

这几部下来就可以防止修改大量数据表而带来的表锁死情况了。

-- 创建新表(默认数据的话直接使用,自定义字段类型可以通过新建一个表保存一条旧表的主键ID和你要创建的字段,通过旧表主键关联实现)
create table tb1 as
select t.*, '' as col_new from tb;

-- 删除旧表
drop table tb;

-- 修改表明
ALTER TABLE tb1 RENAME TO tb;

先加字段,然后升级项目功能,这样不用停服务啊

使用外键再建一张表,这样就可以不用停服务加字段了。

1.升级mysql5.7 在线ddl 可以了解下 https://blog.csdn.net/carry9148/article/details/52640440
2.5000万的表本身已经不正常了,如果是一个在线提供服务给用户的表,不会允许5000万的。一般6-8百万。这时候会进行分表。
3.分表后还有600-800 增加一个字段还需要1分钟,那么选择使用此表人数最少的时候,写一个自动执行脚本。类似凌晨3点。
4.加字段并不需要停止服务。