加速MySQL的alter table操作
MySQL的alter table性能在表很大的时候会出现问题。MySQL执行大部分更改操作都是新建一个需要的结构的空表,然后把所有老的数据插入到新表,最后删除旧表。这会耗费很多时间,尤其是在内存紧张,而表很大并有很多索引的时候。 不是所有的alter table操作都会导致重建表。例如,可以通过两种方式创建或去掉列的默认值(一种快、一种慢)。下面是较慢的方式: alter table film modify column rental_duration tinyint(3) not null default 5; 使用show status分析该命令发现,它执行了1001次句柄读取和1000次写入。换句话说,即使列类型、大小和可空性没有变化,它也把表拷贝到了新表中。 flush status; alter table film modify column rental_duration tinyint(3) not null default 5; show session status like 'handle%'; Variable_name Value Handler_commit 2 ...... Handler_read_rnd_next 1001 ...... Handler_write 1000 理论上,MySQL能跳过构建一个新表的方式。列的默认值实际保存在表的