大数据表结构修改

大数据表结构修改

随着业务的发展。某些业务表会达到很高的量级。这时候某些业务若是牵扯到修改数据结构,就不是简单的alter table 能搞定的事情了sql

话很少说,直接上方案:数据结构

graph LR
    复制一个新表 --> 修改表结构 -->拷贝数据 --> 重命名新表 ---> 删除老表

该方案:速度很快的。几百万数据不到1分钟就搞定了(跟表字段数有关,以实际为准,建议分批拷贝)大数据

如下以表A为例子code

CREATE TABLE `A` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `is_delete` tinyint(1) DEFAULT NULL,
  `type` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  1. 复制一个新表,表结构跟老表一摸同样索引

    create table A_new like A;
  2. 修改表结构(这里以增长字段为例)table

    alter table A_new add column `status` tinyint(8) DEFAULT NULL;
  3. 拷贝数据class

    insert into A_new (id, is_delete, type) select id, is_delete, type from A

ps:select

  1. 若是修改的表结构为增长删除字段,请使用相似上面的sql,注意插入字段和查询字段必须一致
  2. 若是是增删索引,能够使用下面的sqlim

    insert into A_new select * from A
  3. 若是数据量较大,能够使用条件语句,分批拷贝(这里以id为例,通常都以create_time为条件)命名

    insert into A_new (id, is_delete, type) select id, is_delete, type from A where  id > 100000
  1. 修改表名

    rename table `A` to `A_bak`;
    rename table `A_new` to `A`;
  2. 大功告成