Loading

Mysql名词解析-主键索引/回表/索引覆盖/索引下推/MVCC

主键索引和非主键索引

主键索引的叶子节点存的是整行数据。在 InnoDB 里,主键索引也被称为聚簇索引
非主键索引的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为二级索引

回表

普通索引查询方式,则需要先搜索其索引树,得到主键索引的值为,再到主键索引树搜索一次。这个过程称为回表。

索引覆盖

只需要在一棵索引树上就能获取SQL所需的所有列数据,无需回表,速度更快。
(即explain的输出结果Extra字段为Using index时,能够触发索引覆盖)

索引下推 (Index Condition Pushdown),简称ICP

索引下推的下推其实就是指将部分上层(服务层)负责的事情,交给了下层(引擎层)去处理。

使用ICP,当存在索引的列做为判断条件时,存储引擎通过判断索引是否符合MySQL服务器传递的条件,只有当索引符合条件时才会将数据检索出来返回给MySQL服务器。

不使用ICP,通过使用非主键索引进行查询,存储引擎通过索引检索数据,然后返回给MySQL服务器,服务器再判断是否符合条件。

MVCC

MySQL InnoDB存储引擎,实现的是基于多版本的并发控制协议——MVCC (Multi-Version Concurrency Control) 。

MVCC最大的好处:读不加锁,读写不冲突。

LBCC:Lock-Based Concurrency Control,基于锁的并发控制。基于锁的并发机制并发量低,MVCC是在基于锁的并发控制上的改进。

在MVCC并发控制中,读操作可以分成两类:

  1. 快照读:读取的是记录的可见版本 (有可能是历史版本),不用加锁(共享读锁s锁也不加,所以不会阻塞其他事务的写)
  2. 当前读 :读取的是记录的最新版本,当前读返回的记录,都会加上锁,保证其他事务不会再并发修改这条记录
posted @ 2022-04-09 22:22  字符串爱了数组  阅读(308)  评论(0编辑  收藏  举报