大数据表结构修改
随着业务的发展。某些业务表会达到很高的量级。这时候某些业务如果牵扯到修改数据结构,就不是简单的alter table
能搞定的事情了
话不多说,直接上方案:
该方案:速度很快的。几百万数据不到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`;
- 大功告成
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。