Mysql5.5 表为InnoDB,字段为名为type,为普通字段,不被包含在任何索引/主键中。
type字段本来拥有两个值 'a' , 'b' ,我现在要为其加上值 'c' ,于是有了修改语句:
ALTER TABLE
table MODIFY COLUMN
type enum('a','b','c');
我现在想知道我执行上面这条语句大约要消耗多久的时间?
我主要是想知道因为该字段不涉及索引,修改所消耗的时间跟该表的1000w记录有关系吗
modify column会导致重建表(内部实现是建一个最新结构的表,然后导入数据,然后删除旧表,重命名新表为旧表名),所以会比较慢 使用alter table xxx alter column
则是直接修改.frm文件所以会很快。跟表数据有多少无关。
另一个做法其实原理一样,都是修改.frm文件:
1.创建一个新机构的新表
2.flush tables with read lock
.关闭正在使用的表,并且禁止任何表被打开。
3.交换.frm文件
4.unlock tables
释放第二步的锁。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。