Mysql修改表结构、添加索引会锁表吗?

前言

在MySQL5.7和MySQL8.0中,表结构修改和索引添加通常不会锁定整个表。但是,在某些情况下,MySQL可能需要锁定整个表。

MySQL5.7

在MySQL5.7中,对于表结构变更、索引添加,MySQL使用了一种称为“In-Place Alter”的技术。这种技术允许在不锁定表的情况下进行修改。In-Place Alter使用了一种称为“Fast Index Creation”的技术来优化索引添加,它可以在不拷贝原始表数据的情况下创建新索引。

**对于表结构修改,MySQL5.7使用了一种称为“Online DDL”的技术。Online DDL允许在不锁定表的情况下进行表结构修改。**当修改表结构时,MySQL会创建一个新表,并将原始表中的数据复制到新表中。在复制数据期间,原始表仍然可读和可写。完成数据复制后,MySQL会将新表重命名为原始表的名称,并删除原始表。此过程通常只需要几秒钟或几分钟,并且可以在应用程序运行期间执行。

虽然In-Place Alter和Online DDL可以减少对表的锁定,但它们并不适用于所有情况。例如,在进行某些类型的表结构修改时,MySQL可能需要锁定整个表。在这种情况下,In-Place Alter和Online DDL可能不适用。

此外,在MySQL5.7中,如果使用ALTER TABLE语句添加索引,将会锁定表。但是,如果使用CREATE INDEX语句添加索引,则不会锁定表。这是因为CREATE INDEX语句使用了“Concurrent Inserts”的技术,它允许在不锁定表的情况下进行索引添加。Concurrent Inserts在索引添加期间允许其他并发操作,从而减少了锁定的需求。

MySQL8.0

MySQL8.0在表结构修改和索引添加方面引入了一些新的功能。其中最重要的功能是“Invisible Indexes”和“In-Place Alter”升级。

Invisible Indexes

“Invisible Indexes”允许您创建不会影响查询执行计划的索引。这些索引对于实时修改和测试查询计划非常有用。此外,如果某个索引不再需要,您可以将其设置为“不可见”,而不是完全删除它。这可以减少表锁定的时间,因为在删除可见索引之前不需要锁定整个表。

In-Place Alter

“In-Place Alter”在MySQL8.0中进行了升级,可以处理更多类型的表结构修改。例如,现在可以在不锁定表的情况下添加、删除和更改列。如果使用In-Place Alter进行表结构修改,则MySQL将创建一个新的表,将新表中的数据与原始表中的数据进行同步,然后在删除原始表之前将新表重命名为原始表的名称。

小结

在MySQL8.0中,索引添加的行为与MySQL5.7相同。如果使用ALTER TABLE语句添加索引,则将锁定表。相反,如果使用CREATE INDEX语句添加索引,则不会锁定表。使用“Concurrent Inserts”技术添加索引可以避免表锁定,这使得索引添加变得更加高效。

**此外,在MySQL8.0中,还引入了“Instant DDL”功能。这种功能允许您在不锁定表的情况下执行某些DDL操作,例如添加、删除和更改列,以及更改表类型和重命名表。**这可以显著提高MySQL的可用性和可维护性。

转自:https://baijiahao.baidu.com/s?id=1760662405953282994&wfr=spider&for=pc

表结构存储

MySQL5.7

InnoDB

每个数据库有三种文件形式:opt、frm、ibd。

opt: 包含了该数据库的各种属性,比如数据库的字符集和比较规则。
frm : 存放了表的结构,是一个二进制格式文件。
ibd:独立表空间,存放了表的数据和索引。
表结构就是该表的名称,表里面有多少列,每个列的数据类型、约束条件和索引,使用的字符集和比较规则等各种信息,这些信息都体现在了我们的建表语句中。

MyISAM

每个数据库有四种文件形式:opt、frm、MYD、MYI。
MYD: 表数据文件。
MYI:表索引文件。

MySQL8.0

InnoDB

InnoDB存储引擎只有ibd文件。 MySQL8.0将frm文件的信息以及更多信息移动到叫做序列化字典信息(SerializedDictionary Information,SDI)中,SDI在InnoDB下是被写在了ibd文件内部。为了从ibd文件中提取SDI信息,oracle提供了一个应用程序ibd2sdi。 这个工具不需要下载,MySQL8自带的有,只要配置好环境变量即可使用。

MySQL8.0新特性:数据字段
1、 MySQL8.0增加了数据字段缓冲。 字典对象高速缓存是一个共享的全局高速缓存,该高速缓存将先前访问的数据字典对象存储在内存中,以支持对象重用并最小化磁盘I /O,字典对象缓存使用基于 LRU的逐出策略从内存中逐出最近最少使用的对象
2、数据字典对象缓存
字典对象高速缓存是一个共享的全局高速缓存,该高速缓存将先前访问的数据字典对象存储在内存中,以支持对象重用并最小化磁盘I /O,字典对象缓存使用基于 LRU的逐出策略从内存中逐出最近最少使用的对象。
3、序列化字典信息(SDI)。
MySQL8.0不仅将元数据信息存储在数据字典表中,同时也冗余存储了一份在SDI中。对于非InnoDB表,SDI数据在后缀为.sdi的文件中,而对于innodb,SDI数据则直接存储与ibd中,主要是基于一个应用程序ibd2sdi。

新数据字典的局限性:
通过手动mkdir的方式在数据目录下创建库目录,这种方式是不会被数据库所识别到。DDL操作会花费更长的时间,因为之前的DDL操作是直接对.frm文件进行更改操作,只要写一个文件,现在是需要更新数据字典表,代表着需要将数据写到存储引擎、read log、undo log中。

其他

在线 DDL:https://juejin.cn/post/7360583337512271882?searchId=202405101639163447C73DA4D09D29DFD7
后续补充变更列说明…
1、查看数据库版本
select version();
2、创建索引
CREATE INDEX index_name ON table_name(column1, column2, …);
3、变更列
ALTER TABLE your_table_name MODIFY COLUMN column_name new_column_definition;

注意

**1、确保你的MySQL版本支持Instant DDL,DDL即时Instant 功能自MySQL 8.0.12版本引入。**此外,变更操作通常是在数据库的表级别执行的,所以在执行这些操作时,请确保选择合适的时机,避免对业务造成影响。
3、变更列长度。Varchar对于小于等于255字节以内的长度可以使用一个byte 存储。大于255个字节的长度则需要使用2个byte存储。转自:https://blog.csdn.net/JSWANGCHANG/article/details/132027990

1)如果是255长度之内的扩展,或者255之外的扩展,则不锁表,采用in-place方式执行
2)从varchar长度从(0,255) 到 255+, 则会锁表,采用copy方式执行;
3)如果字段的缩小会锁表,采用copy方式执行;

3、Mysql5.7特性:Online DDL说明。转自:https://www.cnblogs.com/zmc60/p/14533123.html

总结

锁表的关键在于以下几点:
1、MySQL版本。每个版本所支持的算法是不一样的。且版本不同InnoDB表结构存储位置不同。
2、当前表的容量(5.6/5.7)。
3、8.0版本增加列等少量 DDL 类型需指定算法。
4、变更列字段长度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/10425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

品味Fendi club:精酿啤酒的精致与与众不同

啤酒,作为世界三大饮料之一,其口感和品质的差异能给人们带来截然不同的体验。在众多啤酒中,Fendi club以其与众不同的精酿啤酒风格,吸引了无数热爱啤酒的人。 Fendi club啤酒的精致与与众不同,首先体现在其酿造工艺上。…

Nature子刊:常见口服药的副作用原来这么大!

哥伦比亚大学Harris H. Wang团队 在《Nature Microbiology》期刊上(IF28.3)发表了关于409种细菌-药物对揭示肠道微生物群扰动的驱动因素的文章,该研究通过对转录组学测定结果进行生信分析,强调了大规模转录组学在肠道微生物-外源化学物相互作用的功能发…

AI应用案例:供应链平台健康状况和发展趋势分析

某供应链平台在2019年就遍布了中国320个城市,为2600多家企业提供超40万个品类的供应链服务。它是通过直供城市终端销售门店,甚至是消费者,最大限度保证品牌和终端的销售利益。 但是平台交易市值较大、涉及的行业较多,而且打破了传…

赛多利斯sartorius MA35维修红外线干燥器秤水份测定仪精密称量仪深圳捷达工控维修

MA35是一款采用热重分析法的基本款水分分析仪,它可对液体、糊状和固体样品的水分进行快速、可靠的分析。 紧凑型坚固耐用的设计,结合极高的精确度和测量准确度,使得MA35成为统一测量任务的理想设备。赛多利斯在水分分析领域几十年的经验可保…

6.数据库

1.实体用矩形表示,属性用椭圆表示,联系用菱形表示 2.层次模型用数表示 3.网状模型用图结构表示 4.关系模型用二维表格结构来表示 5.概念模式基本表 外模式视图 内模式存储 6.模式/内模式映像 外模式/模式映像 7.数据的物理独立性 跟内模式关系 逻辑是视图…

vim 查找字符串的命令

vim查找字符串的命令 在 Vim 中,你可以使用以下命令来查找一个字符串: 普通模式下,按 / 键后输入你要查找的字符串,然后按 Enter 键进行查找。 例如,要查找 "text",你可以按下 /text 后按 Ent…

邦注科技给您解答 什么是注塑机模具保护器

模具监视器,这位制造业的守护神,时刻注视着模具的每一个细微变化。它的工作原理如同一位细心的侦探,利用传感器、数据采集系统和监控软件组成的精良装备,探寻模具的秘密。 传感器如同模具的耳目,敏锐地捕捉着模具的温度…

Github图片显示不出来?两步解决!

很多同学可能和我一样,在GitHub中找一些项目或者资料的时候;总是会看到一些图片显示不出来,或者数学公式乱码: 比如这样 还有这样 其实这个主要是因为DNS污染导致的,具体大家可以百度,这边不详细介绍。 解决…

LagentAgentLego智能体工具使用

1. lagent 参考文档 https://github.com/InternLM/Tutorial/blob/camp2/agent/lagent.md 使用 LMDeploy 部署 conda activate agent lmdeploy serve api_server /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b \--server-name 127.0.0.1 \--model-name in…

JavaEE初阶-多线程4

文章目录 一、单例模式1.1 饿汉模式1.2 懒汉模式 二、阻塞队列1.1 生产者消费者模型1.1.1 现实生活举例1.1.2 生产者消费模型的两个优势1.1.2.1 解耦合1.1.2.2 削峰填谷 1.2 阻塞队列代码1.2.1 使用java标准库的阻塞队列实现生产者消费者模型1.2.2 实现自己的阻塞队列 一、单例…

30年赚1000亿美元--“量化之王”和他最传奇的基金“大奖章”的秘密

文艺复兴是华尔街最成功、最神秘的机构之一。从1988-2018年的30年里,文艺复兴仅向内部员工开放的旗舰基金“大奖章”累计创造了超过1000亿美元的收益,年均回报率高达39%。作为对比,同期“股神”巴菲特的年均回报率为20.5%。 而且,…

软件需求和设计评审

目录 引言 1. 软件评审的方法和技术 2. 产品需求评审:构建正确的产品 3. 设计评审:构建正确的产品 4. 软件评审的最佳实践 结语 引言 在软件开发的迷宫中,需求和设计评审是通往成功产品的关键门户。它们是确保软件质量和满足用户需求的…

【Linux】-IP地址、主机名配置[5]

目录 一、IP和主机名 1、IP地址 2、特殊IP地址 3、主机名 4、在Linux中修改主机名 5、配置主机名映射 二、虚拟机配置固定IP 1、为什么需要固定IP 2、在VMware Workstation中配置固定ip 一、IP和主机名 1、IP地址 每一台联网的电脑都会有一个地址,用于和…

大模型面试常考知识点1

文章目录 1. 写出Multi-Head Attention2. Pre-Norm vs Post-Norm3. Layer NormRMS NormBatch Norm 4. SwiGLU从ReLU到SwishSwiGLU 5. AdamW6. 位置编码Transformer位置编码RoPEALibi 7. LoRA初始化 参考文献 1. 写出Multi-Head Attention import torch import torch.nn as nn …

前端主题切换的多种方式

动态link标签加载不同主题css **原理:**提前准备好几套CSS主题样式文件,在点击切换主题时,创建link标签动态加载到head标签中,或者是动态改变link标签的href属性。 缺点: 动态加载样式文件,如果文件过大网…

vtkScalarsToColors,将标量值映射到颜色

来源: VTK: vtkScalarsToColors Class Reference vtkScalarsToColors 是 VTK 库中的一个抽象类,用于将标量值映射到颜色。这个类定义了一种从数据值到颜色的映射方式,常见的实现包括 vtkLookupTable 和 vtkColorTransferFunction。 vtkScalarsToColors…

Pycharm所有快捷键的使用

1.编辑 快捷键作用Ctrl Space基本的代码完成(类、方法、属性)Ctrl Alt Space快速导入任意类Ctrl Shift Enter语句完成Ctrl P参数信息(在方法中调用参数)Ctrl Q快速查看文档Shift F1外部文档Ctrl 鼠标简介Ctrl F1显示错…

QT6 android程序界面强制横屏显示不旋转

QT6开发的Android程序有时候旋转后程序会变形,比如想让其固定位横屏显示,就需要进行特殊设置,本文提供一种简便的设置方法。 一.AndroidManifest.xml文件介绍 Android的Manifest.xml文件是一个重要的配置文件,用于描述应用程序的…

2024最新从0部署Django项目(nginx+uwsgi+mysql)

云服务器 我这里用的是腾讯云免费试用的2H4Gcentos服务器(后升级为2H8G,保险一点提高内存) 因为网上很多关于django部属的教程都是宝塔啊,python版本控制器啊这种的,我也误打误撞安装了宝塔面板,但这里我…

浅谈运维数据安全

在数字化日益深入的今天,运维数据安全已经成为企业信息安全体系中的核心要素。运维工作涉及到企业信息系统的各个方面,从硬件维护到软件升级,从网络配置到数据备份,无一不需要严谨的数据安全保障措施。本文将从运维数据安全的重要…