Mysql索引

一、mysql主要索引类型

  • 普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值。
  • 唯一索引:索引列中的值必须是唯一的,但是允许为空值。 主键索引:索引列中的值必须是唯一的,不允许有空值。
  • 前缀索引:在文本类型如CHAR,VARCHAR,TEXT类列上创建索引时,可以指定索引列的长度,但是数值类型不能指定。
  • 全文索引:只能在文本类型CHAR,VARCHAR,TEXT类型字段上创建全文索引。字段长度比较大时,如果创建普通索引,在进行like模糊查询时效率比较低,这时可以创建全文索引。MyISAM和InnoDB中都可以使用全文索引。
  • 空间索引:MySQL在5.7之后的版本支持了空间索引,而且支持OpenGIS几何数据模型。MySQL在空间索引这方面遵循OpenGIS几何数据模型规则。

二、单列索引

1、主簇索引查找流程

等值查找
在这里插入图片描述
范围查找
在这里插入图片描述

2、辅助索引查找流程

在这里插入图片描述

三、组合索引

1、组合索引失效场景

组合索引失效场景

2、组合索引底层结构与查找流程

在这里插入图片描述

四、mysql innodb的锁

1、从类型上分

  • 共享锁(S-Lock):允许事务读一行数据
  • 排它锁(X-Lock):允许事务删除或者更新一行数据

2、锁定方式(基于索引)

  • Record lock(行锁):在单行上加锁
  • Gap Lock:间隙锁,锁定一个范围,但不包含当前记录
  • Next-Key Lock:Gap Lock+Record Lock,锁定一个范围,并包含当前记录

四、mvcc与事务隔离级别

1、事务隔离级别

在这里插入图片描述

2、基本概念

1)事务id的分配时机

这里要注意在默认情况下,只有执行修改操作(如INSERT、DELETE、UPDATE语句)才会分配一个事务id,SELECT并不会。

如果通过start transaction使用事务时,并不会马上就分配事务id,也要第一次执行修改操作才会分配,如果开启事务后第一条语句时SELECT,系统会产生如下所示的随机id,等到执行了真正的修改操作时,才会分配一个正式的事务id

2)MVCC读操作
在这里插入图片描述
3)redo log 链条
在这里插入图片描述
4)Read View(读视图)
在这里插入图片描述
产生时机:第一条select执行的时间

<up_limit_id:可见
=low_limit_id:不可见
=up_limit_id && <low_limit_id && ∉(trx_list):可见
=up_limit_id && <low_limit_id && ∈(trx_list):不可见

4)解决不可重复读流程分析
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值