场景
因为公司业务需要,之前的容器只有一种,所以就直接叫了lotCarId,但是因为后来业务中添加了另一种容器,于是大佬们决定使用一个type作为区分,然后因为都是容器,于是加了一个字段containerId,并且查询都是走containerId,于是之前线上的表的lotCarId就没用了.
现需要修改表的索引,但是为了不锁表,于是sql需要添加两个参数.
ALGORITHM=INPLACELOCK = 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如何加索引的时候不锁表相关推荐

  1. mysql删除索引是否锁表_percona-toolkit在线添加删除mysql索引、字段(不锁表)

    1.安装配置yum install perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-DBI perl-ExtUtils-CBuilder  ...

  2. MySQL数据库事务中的行级锁,表级锁,页级锁

    锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...

  3. mysql新加一列_mysql如何增加表中新的列?

    mysql中可以使用"ALTER TABLE"语句来增加表中新的列,语法格式"ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件];":默认是 ...

  4. mysql中lock tables与unlock tables(锁表/解锁)

    在某个地方看到有个例子,具体描述类似如下:商店现在某商品只有1件库存,然后A与B在网上进行下订,A与B几乎同时(或许也就差几毫秒,A比B快那么一点点)进行. 很明显是只有A才能成功下单的,B则会收到库 ...

  5. mysql 批量加索引_mysql优化:按期删数据 + 批量insert + 字符串加索引为何很傻

    嗯,犯了一个很低级的错误,最近暴露出来了.html 背景:mysql 1. 内部平台,接口间断性无返回,查询日志注意到失败时,接口耗时达到4000+(正常状态:100+ms)git 2. 增长日志打点 ...

  6. mysql怎么加索引_mysql怎么添加索引

    在mysql中可以通过使用alter table这个SQL语句来为表中的字段添加索引. 1.添加PRIMARY KEY(主键索引)mysql>ALTER TABLE `table_name` A ...

  7. mysql 如何加索引_mysql如何添加索引

    mysql添加索引的方法:可以通过[create table]语句来添加,如[CONSTRAINT PRIMARY KEY | INDEX [] [] ],表示创建一般索引. 在mysql中可以在创建 ...

  8. Mysql学习宝典(六) -- 数据库锁表及阻塞的几大常见原因和解决办法

    问题说明 当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性.加锁是实现数据库并发控制的一个非常重要的 ...

  9. mysql 性能优化索引、缓存、分表、分布式实现方式。

    系统针对5000台终端测试结果 索引 目标:优化查询速度3秒以内 需要优化.尽量避免使用select * 来查询对象.使用到哪些属性值就查询出哪些使用即可 首页页面: 设备-组织查询 优化 避免使用s ...

最新文章

  1. 初识 ElasticSearch,一个上天下地的搜索引擎 No.158
  2. 怎样从0一步一步搭建用户激励体系
  3. python 内网镜像站_搭建私有YUM仓库与内网镜像站
  4. MySQL事务隔离级别的实现原理
  5. JEECG v3视频陆续更新
  6. 输出三角形字符阵列 (15 分)
  7. T-SQL: Adding More to Our Queries
  8. antv g6 禁止移动_十 AntV
  9. 《深入理解计算机系统》勘误建议
  10. ubuntu 、 google 、搜狗输入法 繁体字的解决办法
  11. 数字时钟word clock Mac设置教程
  12. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java学生综合考评系统b8vlm
  13. 美团2018校园招聘 研发工程师(三)
  14. 聊城大学计算机专业在全国排名,聊城大学排名
  15. java 两张图片合成
  16. 雨夜深思——开发平台(二)
  17. 为什么说90%以上的创业者都在亏钱?
  18. 【微信小程序】微信小程序--倒放音频的实现
  19. 杰理-AC632x开发之usb无法下载问题和原因
  20. PPT地图 - 动态显示省份扩散效果

热门文章

  1. 既然不能独自养家糊口,的确就不应该去抱怨发牢骚
  2. HDFS(下):NameNode和SecondaryNameNode、HDFS工作机制、故障处理、集群安全模式、服役退役节点、集群黑白名单、DataNode多目录详解、HDFS2.x新特性
  3. DFD图练习题(信用卡管理系统CCMS)
  4. Bigtable: a distributed storage system for structured data论文阅读
  5. ES6解构赋值: ES6...转为ES5的写法
  6. linux系统触摸板双击,linux下Synaptics触摸板设置双指触摸
  7. 女神是麦当娜男神是小沈阳
  8. Dreamweaver CC 2017中文版
  9. (二)弹性布局Flex
  10. 利用JACK在Windows下PC之间传递声音