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语句的下一个字段也在联合索引中,则对之前联合索引所命中的主键值进行进一步过滤,以减少回表操作。