服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - 被面试官PUA了:创建索引时一定会锁表

被面试官PUA了:创建索引时一定会锁表

2023-12-25 15:5851CTO Mysql

索引主要是用于提高数据检索速度的一种机制,通过索引数据库可以快速定位到目标数据的位置,而不需要遍历整个数据集,它就像书籍的目录部分,有它的存在,可以大大加速查询的效率。

被面试官PUA了:创建索引时一定会锁表

索引主要是用于提高数据检索速度的一种机制,通过索引数据库可以快速定位到目标数据的位置,而不需要遍历整个数据集,它就像书籍的目录部分,有它的存在,可以大大加速查询的效率。

那么问题来了:在创建索引时一定会锁表吗?

如果你看的是网上的一些资料,或者是通过 chatgpt,那么很可能得到的结果是这样的“是的,创建索引时是会锁表的。”,但这个回答是不正确的,为什么呢?

典型回答

因为在 MySQL 5.6 之前,创建索引时会锁表,所以,在早期 MySQL 版本中一定要在线上慎用,因为创建索引时会导致其他会话阻塞(select 查询命令除外)。

但这个问题,在 MySQL 5.6.7 版本中得到了改变,因为在 MySQL 5.6.7 中引入了 Online DDL 技术(在线 DDL 技术),它允许在创建索引时,不阻塞其他会话(所有的 DML 操作都可以一起并发执行)。

什么是 DDL?

DDL(Data Definition Language,数据库定义语言):用于定义和管理数据库的结构,它主要包括以下语句:

  • CREATE:用于创建数据库、表、索引、视图等对象。
  • ALTER:用于修改数据库、表、索引、视图等已存在的对象的结构。
  • DROP:用于删除数据库、表、索引、视图等对象。
  • TRUNCATE:用于删除表中的所有数据,但保留表的结构。
  • RENAME:用于重命名数据库、表等对象。

什么是 DML?

DML (Data Manipulation Language,数据操作语言) :用于查询和修改数据,它主要包括以下语句:

  • INSERT:用于向表中插入新的数据行。
  • UPDATE:用于更新表中已存在的数据行。
  • DELETE:用于删除表中的数据行。
  • SELECT:用于从表中检索数据。虽然 SELECT 主要用于查询,但某些包含数据修改的扩展 SQL 功能(如 LIMIT、ORDER BY、GROUP BY 等)也属于 DML 的范畴。

什么是 Online DDL?

Online DDL(Online Data Definition Language,在线数据定义语言)是指在数据库运行期间执行对表结构或其他数据库对象的更改操作,而不需要中断或阻塞其他正在进行的事务和查询。

Online DDL 官方介绍文档:https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html

Online DDL 最重要操作定义如下:

被面试官PUA了:创建索引时一定会锁表

简单翻译一下以上内容:

被面试官PUA了:创建索引时一定会锁表

从上面的表格可以看出,有了 Online DDL 技术之后,在添加索引时,会对原本进行操作,并且允许和 DML(数据操作语言 INSERT、UPDATE、DELETE、SELECT)一起并发执行了。

小结

在 MySQL 5.6 之前,创建索引时会锁表,但在 MySQL 5.6.7 之后,因为新增了 Online DDL 技术,所以此时在添加索引时,是可以和 DML 数据操作语言  INSERT、UPDATE、DELETE、SELECT 等命令一起执行的。

延伸 · 阅读

精彩推荐
  • MysqlMySQL压缩版zip安装问题的解决方法

    MySQL压缩版zip安装问题的解决方法

    这篇文章主要给大家介绍了关于MySQL压缩版zip安装问题的解决方法,文中介绍的非常详细,对大家的学习或者使用mysql具有一定的参考学习价值,需要的朋友...

    空杯+空船1542020-09-14
  • Mysqlwin7下MySql 5.7安装配置方法图文教程

    win7下MySql 5.7安装配置方法图文教程

    这篇文章主要为大家分享了win7下MySql 5.7安装配置方法图文教程,感兴趣的小伙伴们可以参考一下 ...

    MYSQL教程网1932020-06-09
  • MysqlMySQL约束constraint用法详解

    MySQL约束constraint用法详解

    大家都知道MySQL中经常会需要创建父子表之间的约束,下面这篇文章主要给大家介绍了关于MySQL约束constraint用法的相关资料,文中通过实例代码介绍的非常详细...

    054318572023-05-12
  • Mysqlmysql 带多个条件的查询方式

    mysql 带多个条件的查询方式

    这篇文章主要介绍了mysql 带多个条件的查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    遇见一只小脑斧9572021-08-12
  • Mysql详解mysql表数据压缩

    详解mysql表数据压缩

    mysql进行压缩是借助于zlib库,采用L777压缩算法,这种算法在减少数据大小、CPU利用方面是成熟的、健壮的、高效的,这篇文章主要介绍了mysql表数据压缩...

    茁壮的小草14662022-09-03
  • MysqlMySql分页时使用limit+order by会出现数据重复问题解决

    MySql分页时使用limit+order by会出现数据重复问题解决

    在MySQL中我们通常会采用limit来进行翻页查询,当limit遇到 order by的时候会出现数据重复问题,本文就来记录一下,感兴趣的可以了解一下...

    Sunny_Chen5572021-09-18
  • Mysql调用MySQL中数据库元数据的方法

    调用MySQL中数据库元数据的方法

    这篇文章主要介绍了调用MySQL中数据库元数据的方法,文中给出了了PHP和Perl脚本下的调用示例,需要的朋友可以参考下 ...

    MYSQL教程网5372020-05-09
  • Mysqlmysql 安全管理详情

    mysql 安全管理详情

    这篇文章主要介绍了mysql 安全管理,MySQL服务器的安全基础是用户应该对他们需要的数据具有适当的访问权,既不能多也不能少,换句话说,用户不能对过...

    敖毛4762021-11-24