MySQL innodb 索引

MySQL innodb索引

1. 系统版本说明

mysql 5.7.25,ubuntu 16.04

2. 索引定义

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

3. 索引类型

在innodb中,索引默认使用B+树模型。
在innodb中,索引可分为聚簇索引和非聚簇索引。

3.1 聚簇索引

聚簇索引即主键索引。同时,在innodb中,整个数据表根据主键形成B+树模型。主键为键,主键所对应的每一行数据作为B+树的叶子节点。

3.2 非聚簇索引

即非主键索引或二级索引。每一个非聚簇索引就是一个B+树。非聚簇索引的组织结构为:非叶子节点为索引字段的值,叶子节点为索引所对应行的主键值。

4. 按索引查找机制

按索引进行搜索能提高数据查找速度。
搜索流程如下:
(1)根据WHERE语句的索引搜索条件搜索B+树中符合相应条件的叶子节点,从而定位where条件所对应的数据行的主键值;
(2)若SELECT语句中所涉及的字段在索引中没有,则需要进行回表操作,即根据步骤(1)得出的主键值是搜索数据表中对应的行,再获取SELECT所需字段;
(3)若SELECT语句中涉及的字段在查询所使用的索引中就存在,就不需要进行回表,从而直接获取索引中对应的字段。
其中,由于步骤(3)所使用的索引就包含SELECT语句所提取的字段,步骤(3)中所涉及的索引就是覆盖索引。

5. 索引下推

MySQL新引入的功能,若在使用联合索引过程中,根据最左前缀的原则命中了联合索引后,若WHERE语句的下一个字段也在联合索引中,则对之前联合索引所命中的主键值进行进一步过滤,以减少回表操作。