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