大数据表构造批改

随着业务的倒退。某些业务表会达到很高的量级。这时候某些业务如果牵扯到批改数据结构,就不是简略的alter table 能搞定的事件了

话不多说,间接上计划:

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

该计划:速度很快的。几百万数据不到1分钟就搞定了(跟表字段数无关,以理论为准,倡议分批拷贝)

以下以表A为例子

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. 批改表构造(这里以减少字段为例)

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

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

ps:

  1. 如果批改的表构造为减少删除字段,请应用相似下面的sql,留神插入字段和查问字段必须统一
  2. 如果是增删索引,能够应用上面的sql

    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. 功败垂成