若有人给你一盏灯,我给你月亮。

– 格巴尼《比较的爱》

索引是储存引擎用于快递找到记录的一种数据结构。数据量足够大时,索引可以极大的加快查询速度,反过来,数据量较小时,不恰当的索引可能会导致查询变慢。

1. 索引基础

索引使用方法:先在索引中找到对应的值,然后根据匹配的索引记录找到对应的数据行。索引可以包含一个或者多个列,列的顺序很重要,MySQL只能高效的使用索引的最左前缀列。

1.1 索引类型

MySQL索引是在存储引擎层实现的,不同的存储引擎索引的实现方式不一样,MySQL支持的索引类型:

B-Tree索引,哈希索引,空间数据索引,全文索引,其他

1.1.1 B-Tree索引

术语叫“B-Tree”,不过各个存储引擎可能用的是不同的结构,比如InnoDB用的B+Tree。同时,B-Tree通常意味着所有的值都是按顺序存储的,并且每个叶子页到根的距离相同。以下是InnoDB的索引抽象表示: