欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[Mysql5.7] DDL Algorithm 和 Lock type 简明

程序员文章站 2022-03-09 08:41:30
...

在使用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.类型介绍 

 

[Mysql5.7] DDL Algorithm 和 Lock type 简明

对于Algorithm一共有3个选项:Default、In place、Copy

[Mysql5.7] DDL Algorithm 和 Lock type 简明

对于Lock Type一共有4个选项:Default、None、Shared、Exclusive

[Mysql5.7] DDL Algorithm 和 Lock type 简明

在写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的文档

[Mysql5.7] DDL Algorithm 和 Lock type 简明

[Mysql5.7] DDL Algorithm 和 Lock type 简明

可以从上面这行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的锁详解可以参考:博客

另外一篇:个人觉得写得较为详细的博客

相关标签: 数据库设计