表结构变更时,可能会有数据重写的情况,如果表较大,会有长时间锁表问题,需要梳理各种表结构变更场景下的表现:
注意前提:表结构变更属于DDL语句,需要独占锁,要求表上没有会话访问。在操作前建议设置锁超时时间,避免因表上有会话存在,DDL语句被阻塞,导致DDL语句阻塞更多的DML、DQL语句。
- 新增列,秒级,与数据量无关。
- 新增列+设置默认值,秒级,与数据量无关。
- 删除列,秒级,与数据量无关。
- 修改列默认值,秒级,与数据量无关。
- 修改列类型,时间与数据量有关,需要重写数据。
- 修改列长度,时间与数据量有关,以及扩展方式有关。
- 由长变短,例如varchar(64)更改为varchar(32),时间与数据量有关,需要重写数据,可能会报错。
- 由短变长,例如varchar(32)更改为varchar(64),秒级,与数据量无关。