[Mysql5.7] DDL Algorithm 和 Lock type 简明
在使用Mysql数据库建立一个新的数据库实体:schema的时候,会要设置数据库的DDL(Data Definition Language)
要设置两个属性:
1.Algorithm
2.Lock Type
本文讨论这两个值的选项的含义和选择方案,使用版本Mysql DB 5.7.x
参考:官方文档5.7 14.13.1 Online DDL Operations
目前较新版本的8.0的官方文档:官方文档8.0 15.12.1 Online DDL Operations
0.类型介绍
对于Algorithm一共有3个选项:Default、In place、Copy
对于Lock Type一共有4个选项:Default、None、Shared、Exclusive
在写SQL语句的时候,也会出现这两个参数,例如写一个修改INDEX的sql语句:
ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name, ALGORITHM=INPLACE, LOCK=NONE;
比较容易迷惑的是这个Default Setting for Algorithm \ Lock Type,下面结合官方的文档进行说明,这个思路同样使用于后续更新的高版本Mysql数据库的类型解释。
首先打开Mysql的官方文档,这里我用的是5.7版本,所以打开5.7的文档。
可以从上面这行Renaming an index的sql语句接口看到其默认参数为ALGORITHM = INPLACE,LOCK = NONE
这就是勾选default的时候的设置
1.Algorithm
1.1 Default
按照mysql官方设置的sql语句的默认参数赋值。
1.2 In place
不会重建表,在原来的表上进行操作。
1.3 Copy
需要拷贝原始表,开销高于In Place,而且表很大的时候,可能因为磁盘的容量不足而操作失败。
1.4 小结
如果设置default,就会按照官方的设置的不同操作的默认实现逻辑进行,
否则按照设定的方式进行,当然有些操作和用户自己设定的方式可能会冲突。
因为并不是所有的操作都可以支持in place 构建。
2.Lock Type
2.1 Default
按照Mysql开发者设置的默认参数选择是否加锁(不加锁:None,加锁:互斥锁(exclusive),共享锁(shared lock))
2.2 None
不加锁。
2.3 Shared
共享锁。
2.4 Exclusive
互斥锁。
关于Mysql的锁详解可以参考:博客
另外一篇:个人觉得写得较为详细的博客
上一篇: 尼康Z400mm f/2.8镜头评测 画质极佳的定焦长焦镜头
下一篇: redis数据库设计