Mysql性能优化实战:数据库锁的介绍与索引查找原理

行级锁&表级锁


什么是行级锁?什么是表级锁?学过程序的同学一定都对锁的概念有一定了解,顾名思义一个是锁住一行,一个是锁住一整张表,具体来看下面的例子:


典型案例


现有表T_A结构和数据如下


Mysql性能优化实战:数据库锁的介绍与索引查找原理


Mysql性能优化实战:数据库锁的介绍与索引查找原理


开启一个事务(session_1)并执行如下语句


Mysql性能优化实战:数据库锁的介绍与索引查找原理

事务一


在session_1不提交的情况下,开启新事务(session_2)并执行语句


Mysql性能优化实战:数据库锁的介绍与索引查找原理


事务二


结果出现事务超时,问题来了,报错是出现锁超时说明使用了表级锁,可是不是说InnoDB是行级锁吗?这里需要注意行级锁必须使用了索引后才会生效

Mysql性能优化实战:数据库锁的介绍与索引查找原理

我们通过给字段column_2添加索引后,再次执行如上的操作发现两个事务互不干扰执行成功,在高并发的场景下可以极大的提高程序运行效率。

死锁

死锁的产生主要是由于不同事务之间相互竞争同一个资源导致的。

Mysql性能优化实战:数据库锁的介绍与索引查找原理

具体案例

同样是上述的T_A表进行行的更新操作,在竞争资源时候引发了死锁


Mysql性能优化实战:数据库锁的介绍与索引查找原理


Mysql性能优化实战:数据库锁的介绍与索引查找原理

可以看出死锁在发生后会立刻报错。这里有个误区,在我们开发中常会遇到并发过高导致数据库中产生大量的锁无法及时释放常被开发人员说成是死锁,其实并不是,真正的死锁在产生的瞬间就会报错了。

索引的查询原理

上篇文章中我对索引的使用做了简单的介绍,一些同学可能对主键和索引这两个概念的区分并不是很清楚,下面我简单介绍下数据库中通过主键和索引查找记录的方式:

Mysql性能优化实战:数据库锁的介绍与索引查找原理

主键存储结构

Mysql性能优化实战:数据库锁的介绍与索引查找原理

索引存储结构

上图分别为主键和索引的存储结构,可以看到通过主键查找可以直接找到对应的记录,通过索引查找则是要先找到对应记录的主键,再根据主键查找对应记录。

通过上图分析可以得出两个结论:

1、必须要设置主键,因为索引最终还是要通过主键定位具体的记录

2、主键最好采用数值型,这样主键的存储分布更为均匀查找效率更高

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值