Mysql索引

本文详细介绍了MySQL的主要索引类型,包括普通索引、唯一索引、主键索引、前缀索引和全文索引,以及空间索引。在单列索引和组合索引中阐述了查找流程。接着讨论了InnoDB的锁机制,如S-Lock和X-Lock,以及行锁、间隙锁和Next-Key Lock。最后,文章深入解析了MVCC与事务隔离级别,包括ReadView的产生和不可重复读的解决流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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)解决不可重复读流程分析
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值