Mysql DDL

Mysql5.6.7以前,DDL的执行流程为:
    1.锁原表,创建临时表,表结构为新定义的表结构
    2.copy原表数据
    3.rename原表和临时表
    4.drop原表

特例:
    对于创建和删除二级索引,有个新特性Fast Index Creation(FIC),可以不用copy原表,直接在原表上操作。

由于没有特殊的处理数据一致性的方法,所以DDL操作会阻塞DML操作,所以我们也可以称之为OFFLINE DDL
    
MySQL 在5.6.7版本推出了Online DDL,DDL的执行有以下几种方式:
1.ALGORITHM=COPY
    该方式和5.6之前的执行方式一样,通过新建表+复制数据+rename来完成DDL操作

2.ALGORITHM=INPLACE
    所有操作在innodb引擎层完成,不需要经过临时表的中转,绝大部分情况下不会阻塞DML.
    INPLACE方式又可以分为两种情况:rebuild和no-rebuild,前者在执行DDL期间会创建新的.ibd和.frm,后者只会创建新的.frm

3.ALGORITHM=DEFAULT
    默认值,Mysql根据DDL类型,自动选择执行方式,优先选择Inplace方法

Mysql DDL一览表(标色记录为Mysql5.7新增)

Mysql DDL_第1张图片

你可能感兴趣的:(Mysql DDL)