在平时我们用mysql的锁时,一般刚接触数据库是很少考虑锁的效率,一般只求到达防止并发的目的就可以了,但是随着数据量的增大我们就会发现有很多sql我们已经写的非常优化了,但是有时候还是很慢,很难找到原因,这时候我们就应该考虑一下是不是mysql的锁在导致的,(当然可能的原因很多,比如没有正确的建立以及使用索引、事物过长、服务器配置跟不上等等,这里主要讨论索引和锁的联系。)下面我们来举一个例子;

我们首先建立一个新的数据表:

这里我们的主键默认是有索引的;这边加几条数据

然后我们开两个进程进行测试:

先加一个where条件没有涉及到索引的锁:

然后我们在第二个窗口进行一个更新这一行的数据,我们会发现这个操作会被卡着,

然后我们提交事务会发现第二个窗口的数据会立马执行,

从上面来看似乎没有任何问题,这样确实达到了我们想要的目的,但是你可以再加同样的锁,试着更新下其他的数据比如我下面执行的数据:

上面的三种情况都是我用同样的流程测试的,他们都会被卡住,这样问题就来了,我们其实在锁住name='测试姓名'的时候或许只是想锁住id=133和id=134两行,我们并不想锁住135,136,137,但是这三行我们也访问不了,因为我们的锁是一个表锁,我们来试一下另一种用锁时用到索引的情况:

上面用锁时用到了索引,但是我们在更新数据时还是被卡住了;这里我们就会觉得索引其实也没什么用,但是你遇到同样的锁,更新数据时也用到索引是可以看一下效果:

我们会发现这个没有被锁卡住,直接更新了;

下面总结一下:如果我们的锁用到索引就是行锁,如果没有用到索引就是表锁,但是我们操作的数据必须用到锁才行;

下面我们来说一下为什么会这样:

首先我们知道如果没有建立索引的话我们在进行数据选取或者定位的时候是通过全表扫描的形式来进行的,这样就会形成表锁,要是有索引的话就会直接定位到指定的行,就是形成行锁,但是要注意你在更新数据是假如没用到索引也会全表扫描,当扫到被锁的这一行是也会被锁住,所以达不到想要的效果;

浅谈mysql的锁和索引之间莫大的联系相关推荐

  1. 浅谈MySQL的B树索引与索引优化

    转载自   浅谈MySQL的B树索引与索引优化 MySQL的MyISAM.InnoDB引擎默认均使用B+树索引(查询时都显示为"BTREE"),本文讨论两个问题: 为什么MySQL ...

  2. php 如何设计索引_Mysql学习浅谈mysql的索引设计原则以及常见索引的区别

    <Mysql学习浅谈mysql的索引设计原则以及常见索引的区别>要点: 本文介绍了Mysql学习浅谈mysql的索引设计原则以及常见索引的区别,希望对您有用.如果有疑问,可以联系我们. 索 ...

  3. 浅谈mysql的主键和索引

    在上一篇文章<count(1).count(*).count(字段)哪个更靠谱>中,我们提到过主键是优化不了count的查询效率的,需要建索引才可以,那么,是不是意味着主键的效率还不如一般 ...

  4. 浅谈MySQL表类型

    小小子的文章写的不错哦. 转载:http://www.xiaoxiaozi.com/2009/07/14/1171/ 浅谈MySQL表类型 MySQL为我们提供了很多表类型供选择,有MyISAM.IS ...

  5. 支付宝的数据库是MySQL变种_浅谈MySql的储存引擎(表类型)

    浅谈mysql的存储引擎(表类型) 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库, ...

  6. 浅谈MySQL存储引擎-InnoDBMyISAM

    浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...

  7. mysql怎么在海量数据上ddl_浅谈MySQL Online DDL(中)

    本文首发于个人微信公众号<andyqian>,期待你的关注! 前言 在上一篇文章中<浅谈MySQL Online DDL (上)>中,我们谈到了MySQL Online DDL ...

  8. 并发执行变成串行_大神浅谈数据库并发控制 锁和 MVCC

    在学习几年编程之后,你会发现所有的问题都没有简单.快捷的解决方案,很多问题都需要权衡和妥协,而本文介绍的就是数据库在并发性能和可串行化之间做的权衡和妥协 - 并发控制机制.  如果数据库中的所有事务 ...

  9. 浅谈mysql主从复制的高可用解决方案

    1.熟悉几个组件(部分摘自网络) 1.1.drbd      -- DRBD(Distributed Replicated Block Device),DRBD号称是 "网络 RAID&qu ...

最新文章

  1. 预装鸿蒙系统的手机,首款预装鸿蒙系统的手机入网,麒麟9000加持,型号亮了...
  2. 一次Linux磁盘损坏导致系统不可用恢复实例
  3. Android 抽屉布局
  4. WordPress网站搬家教程(根目录程序+ MySQL数据库)
  5. linux weblogic修改内存,在linux运行weblogic出现运行内存不足错误,求鞭挞....
  6. js横向滚动_seleniumJS处理滚动条
  7. 软考网络管理员学习笔记8之第八章网络安全技术
  8. linux 安装 vmvare
  9. python image.open函数_PIL.Image.open和cv2.imread的比较与相互转换的方法
  10. QEMU中音频模拟工作过程(十)
  11. [OT]“蓝帽”会议
  12. java 毕向东 笔记_毕向东Java基础部分笔记
  13. 单片机程序框架设计与实现
  14. 春天最美的成语,都在古诗词里!
  15. linux文件权限 705,Linux 文件权限 - osc_86eb7mly的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. CAD批量画八边形风机基础平台
  17. 码元速率估计-速率信号法
  18. js删除数组中的指定对象
  19. 阿西莫夫科幻巨著 “基地三部曲”推荐
  20. oracle-表创建

热门文章

  1. Eclipse Debug setp into无法进入源码中的解决办法
  2. nng 服务器底层给管道设置安全描述符,开启listen,实现与chrome跨进程通信
  3. 2021年安全员-B证考试及安全员-B证考试内容
  4. ​​​​​​​CISAW信息安全保障人员认证优势
  5. 中国诗歌艺术11诗的魅惑:中国诗歌的几个基本元素之选音与读音
  6. 知乎最高赞回答!零代码基础,把报表做出科技感是什么体验?
  7. java使用web3j,部署智能合约在测试链上,并调用(万字详细教程)
  8. php怎么播放大视频教程,PHP获取各大视频网站页面中的Flash播放地址_PHP教程
  9. 回溯法求解旅行商问题
  10. 判断一个字符串是否是JSON字符串的坑