mysql如何加索引的时候不锁表
场景
因为公司业务需要,之前的容器只有一种,所以就直接叫了lotCarId,但是因为后来业务中添加了另一种容器,于是大佬们决定使用一个type作为区分,然后因为都是容器,于是加了一个字段containerId,并且查询都是走containerId,于是之前线上的表的lotCarId就没用了.
现需要修改表的索引,但是为了不锁表,于是sql需要添加两个参数.
ALGORITHM=INPLACE
和LOCK = NONE
ALTER TABLE `tableName`
ADD INDEX idx_container_id(container_id) USING BTREE ,
ALGORITHM=INPLACE, LOCK = NONE;
分析
下面分别分析下这两个参数的意义:
ALGORITHM=INPLACE
更优秀的解决方案,在当前表加索引,步骤:
1.创建索引(二级索引)数据字典
2.加共享表锁,禁止DML,允许查询
3.读取聚簇索引,构造新的索引项,排序并插入新索引
4.等待打开当前表的所有只读事务提交
5.创建索引结束ALGORITHM=COPY
通过临时表创建索引,需要多一倍存储,还有更多的IO,步骤:
1.新建带索引(主键索引)的临时表
2.锁原表,禁止DML,允许查询
3.将原表数据拷贝到临时表
4.禁止读写,进行rename,升级字典锁
5.完成创建索引操作LOCK=DEFAULT:默认方式,MySQL自行判断使用哪种LOCK模式,尽量不锁表
LOCK=NONE:无锁:允许Online DDL期间进行并发读写操作。如果Online DDL操
作不支持对表的继续写入,则DDL操作失败,对表修改无效
LOCK=SHARED:共享锁:Online DDL操作期间堵塞写入,不影响读取
LOCK=EXCLUSIVE:排它锁:Online DDL操作期间不允许对锁表进行任何操作
参考链接: https://blog.csdn.net/fujian9544/article/details/106462274
mysql如何加索引的时候不锁表相关推荐
- mysql删除索引是否锁表_percona-toolkit在线添加删除mysql索引、字段(不锁表)
1.安装配置yum install perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-DBI perl-ExtUtils-CBuilder ...
- MySQL数据库事务中的行级锁,表级锁,页级锁
锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...
- mysql新加一列_mysql如何增加表中新的列?
mysql中可以使用"ALTER TABLE"语句来增加表中新的列,语法格式"ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件];":默认是 ...
- mysql中lock tables与unlock tables(锁表/解锁)
在某个地方看到有个例子,具体描述类似如下:商店现在某商品只有1件库存,然后A与B在网上进行下订,A与B几乎同时(或许也就差几毫秒,A比B快那么一点点)进行. 很明显是只有A才能成功下单的,B则会收到库 ...
- mysql 批量加索引_mysql优化:按期删数据 + 批量insert + 字符串加索引为何很傻
嗯,犯了一个很低级的错误,最近暴露出来了.html 背景:mysql 1. 内部平台,接口间断性无返回,查询日志注意到失败时,接口耗时达到4000+(正常状态:100+ms)git 2. 增长日志打点 ...
- mysql怎么加索引_mysql怎么添加索引
在mysql中可以通过使用alter table这个SQL语句来为表中的字段添加索引. 1.添加PRIMARY KEY(主键索引)mysql>ALTER TABLE `table_name` A ...
- mysql 如何加索引_mysql如何添加索引
mysql添加索引的方法:可以通过[create table]语句来添加,如[CONSTRAINT PRIMARY KEY | INDEX [] [] ],表示创建一般索引. 在mysql中可以在创建 ...
- Mysql学习宝典(六) -- 数据库锁表及阻塞的几大常见原因和解决办法
问题说明 当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性.加锁是实现数据库并发控制的一个非常重要的 ...
- mysql 性能优化索引、缓存、分表、分布式实现方式。
系统针对5000台终端测试结果 索引 目标:优化查询速度3秒以内 需要优化.尽量避免使用select * 来查询对象.使用到哪些属性值就查询出哪些使用即可 首页页面: 设备-组织查询 优化 避免使用s ...
最新文章
- 初识 ElasticSearch,一个上天下地的搜索引擎 No.158
- 怎样从0一步一步搭建用户激励体系
- python 内网镜像站_搭建私有YUM仓库与内网镜像站
- MySQL事务隔离级别的实现原理
- JEECG v3视频陆续更新
- 输出三角形字符阵列 (15 分)
- T-SQL: Adding More to Our Queries
- antv g6 禁止移动_十 AntV
- 《深入理解计算机系统》勘误建议
- ubuntu 、 google 、搜狗输入法 繁体字的解决办法
- 数字时钟word clock Mac设置教程
- 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java学生综合考评系统b8vlm
- 美团2018校园招聘 研发工程师(三)
- 聊城大学计算机专业在全国排名,聊城大学排名
- java 两张图片合成
- 雨夜深思——开发平台(二)
- 为什么说90%以上的创业者都在亏钱?
- 【微信小程序】微信小程序--倒放音频的实现
- 杰理-AC632x开发之usb无法下载问题和原因
- PPT地图 - 动态显示省份扩散效果
热门文章
- 既然不能独自养家糊口,的确就不应该去抱怨发牢骚
- HDFS(下):NameNode和SecondaryNameNode、HDFS工作机制、故障处理、集群安全模式、服役退役节点、集群黑白名单、DataNode多目录详解、HDFS2.x新特性
- DFD图练习题(信用卡管理系统CCMS)
- Bigtable: a distributed storage system for structured data论文阅读
- ES6解构赋值: ES6...转为ES5的写法
- linux系统触摸板双击,linux下Synaptics触摸板设置双指触摸
- 女神是麦当娜男神是小沈阳
- Dreamweaver CC 2017中文版
- (二)弹性布局Flex
- 利用JACK在Windows下PC之间传递声音