我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql锁和索引之间有何具体的联系

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql锁和索引之间有何具体的联系

本篇文章给大家主要讲的是关于mysql锁和索引之间有何具体的联系的内容,感兴趣的话就一起来看看这篇文章吧,相信看完mysql锁和索引之间有何具体的联系对大家多少有点参考价值吧。

在平时我们用mysql的锁时,一般刚接触数据库是很少考虑锁的效率,一般只求到达防止并发的目的就可以了,但是随着数据量的增大我们就会发现有很多sql我们已经写的非常优化了,但是有时候还是很慢,很难找到原因,这时候我们就应该考虑一下是不是mysql的锁在导致的。

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

mysql锁和索引之间有何具体的联系

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

mysql锁和索引之间有何具体的联系

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

mysql锁和索引之间有何具体的联系

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

mysql锁和索引之间有何具体的联系

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

mysql锁和索引之间有何具体的联系

mysql锁和索引之间有何具体的联系

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

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

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

mysql锁和索引之间有何具体的联系

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

mysql锁和索引之间有何具体的联系

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

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

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

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

以上关于mysql锁和索引之间有何具体的联系详细内容,对大家有帮助吗?如果想要了解更多相关,可以继续关注我们的行业资讯板块。 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql锁和索引之间有何具体的联系

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

目录