关于mysql:大数据表结构修改

39次阅读

共计 787 个字符,预计需要花费 2 分钟才能阅读完成。

大数据表构造批改

随着业务的倒退。某些业务表会达到很高的量级。这时候某些业务如果牵扯到批改数据结构,就不是简略的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. 功败垂成

正文完
 0