MySQL索引分类 | 青训营笔记

87 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天

Day10

索引

查询数据时,MySQL底层会触发磁盘IO,对表中的数据逐条读取并判断。数据越多,查询越慢。

《新华字典》中有目录索引,我们可以根据音节、偏旁等方式查找不认识的字。

类似地,MySQL也提供了索引机制。

索引分类

按数据结构分

索引结构由存储引擎决定,而MySQL引擎层属于可拔插式引擎。

B+Tree类型

MySQL中最常用的索引结构,大部分引擎支持,有序。

Hash类型

大部分存储引擎都支持,字段值不重复的情况下查询最快,无序。

R-Tree类型

MyISAM引擎支持,也就是空间索引的默认结构类型。

T-Tree类型

NDB-Cluster引擎支持,主要用于MySQL-Cluster服务中。

按字段数量分

单列索引

基于一个字段建立。

  • 唯一索引:指索引中的索引节点值不允许重复,一般配合唯一约束使用。
  • 主键索引:主键索引是一种特殊的唯一索引,和普通唯一索引的区别在于不允许有空值。
  • 普通索引:通过KEY、INDEX关键字创建的索引就是这个类型,没啥限制,单纯让查询快一点。
  • .....
多列索引

由多个字段组合建立。

多种叫法:组合索引、联合索引、复合索引、多值索引....

当建立多列索引后,一条SELECT语句,只有当查询条件中了包含了多列索引的第一个字段时,才能使用多列索引。

按存储方式分

聚簇索引
  • 也称聚集索引、簇类索引
  • 逻辑上连续且物理空间上的连续
  • 索引数据和表数据在磁盘中的位置是一起的
  • 一张表中只能存在一个聚簇索引,一般都会选用主键作为聚簇索引
  • 一般聚簇索引要求索引必须是非空唯一索引
  • InnoDB可能隐式定义一个主键来作为聚簇索引
非聚簇索引
  • 也称非聚集索引、非簇类索引、二级索引、辅助索引、次级索引
  • 逻辑上的连续,物理空间上不连续
  • 索引数据和表数据在磁盘中的位置是分开的
  • 用物理地址的方式维护索引节点和表数据的联系
  • 树的叶子节点存储聚簇索引的key,拿到key再去聚簇索引树中找