大数据表构造批改
随着业务的倒退。某些业务表会达到很高的量级。这时候某些业务如果牵扯到批改数据结构,就不是简略的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;
-
复制一个新表,表构造跟老表一摸一样
create table A_new like A;
-
批改表构造(这里以减少字段为例)
alter table A_new add column `status` tinyint(8) DEFAULT NULL;
-
拷贝数据
insert into A_new (id, is_delete, type) select id, is_delete, type from A
ps:
- 如果批改的表构造为 减少删除字段 ,请应用相似下面的 sql,留神 插入字段和查问字段必须统一
-
如果是 增删索引,能够应用上面的 sql
insert into A_new select * from A
-
如果数据量较大,能够应用条件语句,分批拷贝(这里以 id 为例,个别都以 create_time 为条件)
insert into A_new (id, is_delete, type) select id, is_delete, type from A where id > 100000
-
批改表名
rename table `A` to `A_bak`; rename table `A_new` to `A`;
- 功败垂成