首页 数据库 mysql教程 mysql锁和索引之间的联系

mysql锁和索引之间的联系

Mar 17, 2018 am 10:33 AM
mysql 索引 联系

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

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


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


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


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


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



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

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

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

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


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

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

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

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

相关推荐:

mysql的锁机制_MySQL

MySQL锁的用法之表级锁

如何实现MySQL锁的优化

以上是mysql锁和索引之间的联系的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP 的大数据结构处理技巧 PHP 的大数据结构处理技巧 May 08, 2024 am 10:24 AM

PHP 的大数据结构处理技巧

如何优化 PHP 中的 MySQL 查询性能? 如何优化 PHP 中的 MySQL 查询性能? Jun 03, 2024 pm 08:11 PM

如何优化 PHP 中的 MySQL 查询性能?

如何在 PHP 中使用 MySQL 备份和还原? 如何在 PHP 中使用 MySQL 备份和还原? Jun 03, 2024 pm 12:19 PM

如何在 PHP 中使用 MySQL 备份和还原?

Java 枚举类型在数据库中的应用场景有哪些? Java 枚举类型在数据库中的应用场景有哪些? May 05, 2024 am 09:06 AM

Java 枚举类型在数据库中的应用场景有哪些?

如何使用 PHP 插入数据到 MySQL 表中? 如何使用 PHP 插入数据到 MySQL 表中? Jun 02, 2024 pm 02:26 PM

如何使用 PHP 插入数据到 MySQL 表中?

如何修复 MySQL 8.4 上的 mysql_native_password 未加载错误 如何修复 MySQL 8.4 上的 mysql_native_password 未加载错误 Dec 09, 2024 am 11:42 AM

如何修复 MySQL 8.4 上的 mysql_native_password 未加载错误

如何在 PHP 中使用 MySQL 存储过程? 如何在 PHP 中使用 MySQL 存储过程? Jun 02, 2024 pm 02:13 PM

如何在 PHP 中使用 MySQL 存储过程?

PHP数组分页的性能优化策略 PHP数组分页的性能优化策略 May 02, 2024 am 09:27 AM

PHP数组分页的性能优化策略

See all articles