WHCSRL 技术网

Mysql联合索引及最左原则

概述

联合索引又叫复合索引。两个或更多个列上的索引被称作复合索引。

联合索引存储结构

表employees创建联合索引name_age_position(‘name’,‘age’,‘position’),联合索引以及表数据在B+树存储示意图如上。首先按name字段排序:

name相同,按age字段排序:

name、age相同,按position字段排序:

联合索引具体查找步骤

select * from employees where name = ‘Jeff’ and age = ‘22’ and position=‘dev’;

  1. 首先从根节点开始查找,进行第一次磁盘IO,第二个索引的第一个索引列为 HanMeimei,Jeff大于HanMeimei,第三个索引的第一个索引列为Lilei,Jeff小于Lilei,于是从这俩索引的中间读到下一个节点的磁盘文件地址(此处实际上是存在一个指针的,指向的是下一个节点的磁盘位置)。
  2. 进行一次磁盘IO,将此节点值加载后内存中,然后判断age的值,搜索匹配数据,然后再判断position,最终获取到叶子节点中具体行记录。

如果,联合索引name_age_position是辅助索引,还需要根据叶子节点中关联的主键值 回表 去主键索引树(聚簇索引)中查询具体的行记录。

推荐阅读