B 树聚集索引结构图
- 聚集索引就是以主键创建的索引
- 聚集索引在叶子节点存储的是表中的数据
非聚集索引结构图
假设索引列为Col3,索引结构图如下:
- 非聚集索引就是以非主键创建的索引
- 非聚集索引在叶子节点存储的是主键和索引列
- 使用非聚集索引查询出数据时,拿到叶子上的主键再去查到想要查找的数据。(拿到主键再查找这个过程叫做回表)
- 假设所查询的列,刚好都是索引对应的列,不用再回表查,那么这个索引列,就叫覆盖索引。
InnoDB 锁类型思维导图
加锁机制
乐观锁与悲观锁是两种并发控制的思想,可用于解决丢失更新问题。
乐观锁
- 每次去取数据,都很乐观,觉得不会出现并发问题。
- 因此,访问、处理数据每次都不上锁。
- 但是在更新的时候,再根据版本号或时间戳判断是否有冲突,有则处理,无则提交事务。
悲观锁
- 每次去取数据,很悲观,都觉得会被别人修改,会有并发问题。
- 因此,访问、处理数据前就加排他锁。
- 在整个数据处理过程中锁定数据,事务提交或回滚后才释放锁.
锁粒度
- 表锁: 开销小,加锁快;锁定力度大,发生锁冲突概率高,并发度最低;不会出现死锁。
- 行锁: 开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高。
- 页锁: 开销和加锁速度介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般
兼容性
共享锁:
- 又称读锁(S锁)。
- 一个事务获取了共享锁,其他事务可以获取共享锁,不能获取排他锁,其他事务可以进行读操作,不能进行写操作。
- SELECT ... LOCK IN SHARE MODE 显示加共享锁。
排他锁:
- 又称写锁(X锁)。
- 如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
- SELECT ... FOR UPDATE 显示添加排他锁。
锁模式
- 记录锁: 在行相应的索引记录上的锁,锁定一个行记录
- gap锁: 是在索引记录间歇上的锁,锁定一个区间
- next-key锁: 是记录锁和在此索引记录之前的gap上的锁的结合,锁定行记录 区间。
- 意向锁 是为了支持多种粒度锁同时存在;
来源:掘金,原文https://juejin.im/entry/5d444e685188255d8249c72c
现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了。最近发现了一个非常适合小白入门的教程,不仅通俗易懂而且还很风趣幽默。所以忍不住分享一下给大家。点这里可以跳转到教程。
,