• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > mysql锁和索引之间的联系

mysql锁和索引之间的联系

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了mysql,联系,索引等相关知识,希望本文的分享对您有所帮助
在平时我们用mysql的锁时,一般刚接触数据库是很少考虑锁的效率,一般只求到达防止并发的目的就可以了,但是随着数据量的增大我们就会发现有很多sql我们已经写的非常优化了,但是有时候还是很慢,很难找到原因,这时候我们就应该考虑一下是不是mysql的锁在导致的。

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


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


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


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


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



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

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

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

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


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

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

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

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

相关推荐:

mysql的锁机制_MySQL

MySQL锁的用法之表级锁

如何实现MySQL锁的优化

以上就是mysql锁和索引之间的联系的详细内容,更多请关注微课江湖其它相关文章!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2018-12-05SQL查找某一条记录的方法
  • 2017-05-11MySQL 存储过程中执行动态SQL语句的方法
  • 2018-12-05Oracle中的Connect/session和process的区别及关系介绍
  • 2018-12-05获取MSSQL数据字典的SQL语句
  • 2018-12-05INSERT INTO SELECT语句与SELECT INTO FROM语句的一些区别
  • 2017-05-11深入研究mysql中的varchar和limit(容易被忽略的知识)
  • 2017-05-11mysql建库时提示Specified key was too long max key length is 1000 bytes的问题的解决方法
  • 2018-12-05MySQL学习之Java连接MySQL数据库的图文代码实例
  • 2017-05-11在大数据情况下MySQL的一种简单分页优化方法
  • 2018-12-05MySQL连接时出现1449与1045异常解决办法详解

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 关于Procedure_Analyse的文章推荐
    • 将数据插入到MySQL表中的详细教程
    • Mysql修改默认数据目录
    • mysql 按中文字段排序
    • Fedora环境下装MySQL命令方法介绍
    • MySQL用户权限管理图文详解
    • 在MySQLDump中使用-w语句进行备份的方法
    • 详细介绍MySQL指定各分区路径
    • mysql嵌套查询和联表查询优化方法
    • SQL 特殊语句(学习笔记)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有