1 从数据结构角度看

1.1 B+Tree 索引

B+Tree 的特点便是以树的形式组织数据,同时将所有数据均放到叶子结点,最后在叶子结点上构造有序链表,这种结构使得查询数据和区间扫表的性能非常高。

1.2 Hash 索引

InnoDB 存储引擎支持的哈希索引是自适应的,InnoDB 存储引擎会根据表的使用情况自动为表生成哈希索引,不能认为干预是否在一张表中生成哈希索引。

1.3 FULLTEXT 索引

从 MySQL 5.6 版本开始 InnoDB 支持全文索引

2 从物理存储角度看

2.1 聚集索引

InnoDB 中的主键索引便是聚簇索引,聚簇索引是由 B+Tree 实现的,它将叶子结点的数据域上直接存放节点数据,所以使用聚簇索引查找,可以直接找到数据。一张表只能有一个聚簇索引,同时其中用来排序的数据是主键数据。

2.2 非聚集索引也称为辅助索引

非聚集索引与聚集索引主要的不同点在于它的叶子结点的数据域存放的是主键,排序使用的是指定的用来构建该索引的字段。

3 从逻辑角度看

3.1 普通索引也称为单列索引

最基本的索引,没有任何限制

3.2 组合索引也称为组合索引

为了更多的提高 mysql 效率可建立组合索引,遵循” 最左前缀 “原则

3.3 唯一索引

与” 普通索引” 类似,不同的就是:索引列的值必须唯一,但允许有空值

3.4 主键索引

它是一种特殊的唯一索引,不允许有空值

3.5 全文索引

针对较大的数据,生成全文索引很耗时耗空间

3.6 覆盖索引

覆盖索引就是直接走的索引,直接在内存中就拿到值,不需要查询数据库。如分页就要走覆盖索引,因为性能比较高

4 参考文章

  1. MySQL 性能优化:索引和查询优化
  2. MySQL 索引背后的数据结构及算法原理
  3. 《MySQL 技术内幕 InnoDB 存储引擎》