OnlineDDL支持在线更改表结构的同时运荇DML语句。Online DDL是5.7版本的特性主要包含:
通常,无需手动指定开启OnlineDDLMySQL会自行选择。
同时再alter语句中,我们也可以执行不使用任何锁语法如下:
如下针对表索引操莋的行为支持Online DDL:
需要注意的是,重建聚集索引总是需要拷贝表数据所以我们在建一张表的时候最好指定主键。
默认MySQL在DDL操作时尽可能的少用锁。LOCK条件可以限制MySQL使用锁如果一个DDL操作被LOCK条件限制了更低级别的锁,那么會直接报错LOCK的范围由小到大如下排列:
Online DDL可以看做有如下三个步骤:
这里也向我们展示了为什么现在的Online DDL仍然会出现死锁。所以尽量不要在事务高峰期执行DDL SQL语句
OnlineDDL的性能取决于当前操作是替换还是重建操作。
所以建议在给一张大表运行DDL语句时我们最好对大表做一张复制表,然后针对复制表操作看下耗时和影响行數,行数为0 则没有发生表复制