加快alter table

mysql的alter table操作的性能对打表来说是个大问题。

mysql执行大部分修改表结构的方法是用新的结构创建一个空表,从旧表中查出所有的数据插入新表,然后删除旧表。这样操作就可能需要花费很长时间,如果内存不足而表又很大,而且还有很多索引的情况下尤其如此。

一般而言大部分AlterTable操作将导致mysql服务中断。

不是所有的alter table操作都会引起表重建

alter table允许使用alter column,modify column和change column语句修改列。这三种菜做都是不一样的。

所有的modify colum操作都将导致表重建。

alter column会直接修改.frm文件而不涉及表数据。所以,这个操作时非常快的。

Mysql在5.6版本之前,直接修改表结构的过程中会锁表,具体的操作步骤如下:
(1)首先创建新的临时表,表结构通过命令ALTAR TABLE新定义的结构
(2)然后把原表中数据导入到临时表
(3)删除原表
(4)最后把临时表重命名为原来的表名

具体ddl如何工作

参考:http://www.cnblogs.com/cchust/p/4639397.html

Mysql 5.6 虽然引入了Online DDL,但是并不是修改表结构的时候,一定不会导致锁表,在一些场景下还是会锁表的,比如
①某个慢SQL或者比较大的结果集的SQL在运行,执行ALTER TABLE时将会导致锁表发生;
②存在一个事务在操作表的时候,执行ALTER TABLE也会导致修改等待;

猜你喜欢

转载自www.cnblogs.com/lccsblog/p/12635135.html