加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

数据库两大必备神器:索引和锁底层原理是什么!

发布时间:2018-10-28 02:43:00 所属栏目:编程 来源:Java3y
导读:【51CTO技能沙龙】10月27日,让我们配合试探AI场景化应用实现之道 一、索引 在之前,我对索引有以下的认知: 索引可以加速数据库的检索速率; 表常常举办INSERT/UPDATE/DELETE操纵就不要成立索引了,换言之:索引会低落插入、删除、修改等维护使命的速率;

张三也对这笔记录修改:update A set Name=lisi,version=version+1 where ID=#{id} and version=#{version},但失败了!由于当前数据库中的版本跟查询出来的版本纷歧致!

数据库两大必备神器:索引和锁底层道理是什么!

4、间隙锁GAP

当我们用范畴前提检索数据而不是相称前提检索数据,并哀求共享或排他锁时,InnoDB会给切合范畴前提的已稀有据记录的索引项加锁;对付键值在前提范畴内但并不存在的记录,叫做“间隙(GAP)”。InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁。

值得留意的是:间隙锁只会在Repeatable read断绝级别下行使~

例子:若是emp表中只有101笔记录,其empid的值别离是1,2,...,100,101

Select * from emp where empid > 100 for update;

上面是一个范畴查询,InnoDB不只会对切合前提的empid值为101的记录加锁,也会对empid大于101(这些记录并不存在)的“间隙”加锁。

InnoDB行使间隙锁的目标有两个:

  •  为了防备幻读(上面也说了,Repeatable read断绝级别下再通过GAP锁即可停止了幻读)
  •  满意规复和复制的必要MySQL的规复机制要求:在一个事宜未提交前,其他并发事宜不能插入满意其锁定前提的任何记录,也就是不应承呈现幻读

5、死锁

并发的题目就少不了死锁,在MySQL中同样会存在死锁的题目。

但一样平常来说MySQL通过回滚帮我们办理了不少死锁的题目了,但死锁是无法完全停止的,可以通过以下的履历参考,来尽也许少碰着死锁:

  1)以牢靠的次序会见表和行。好比对两个job批量更新的气象,简朴要领是对id列表先排序,后执行,这样就停止了交错守候锁的气象;将两个事宜的sql次序调解为同等,也能停止死锁。

  2)大事宜拆小。大事宜更倾向于死锁,假如营业应承,将大事宜拆小。

  3)在统一个事宜中,尽也许做到一次锁定所必要的全部资源,镌汰死锁概率。

  4)低落断绝级别。假如营业应承,将断绝级别调低也是较好的选择,好比将断绝级别从RR调解为RC,可以停止掉许多由于gap锁造成的死锁。

  5)为表添加公道的索引。可以看到假如不走索引将会为表的每一行记录添加上锁,死锁的概率大大增大。

6、锁总结

上面说了一大堆关于MySQL数据库锁的对象,此刻来简朴总结一下。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读