InnoDB存储引擎支持的索引:

  1. B+树索引
  2. 哈希索引
  3. 全文索引

一、B+树索引

注意:

  1. B+树索引不能找到一个给定键值的具体行,只能找到数据行所在的页,然后数据库通过把页读入到内存中,再在内存中进行查找。
  2. B+树具有高扇出性,因此在数据库中B+树的高度一般在2~4层。

B+树分类:
聚集索引:按照每张表的主键构造一颗B+树,同时叶子节点中存放的即为整张表的行记录数据。

注:
一张表只有一个聚集索引. 聚集索引的存储在物理上是不连续的,而是是逻辑上连续的。
页(叶子节点)通过双向链表连接,且按照主键顺序排序。 页中的记录(行)也是通过双向链表按主键顺序进行维护的,物理上并不是按主键顺序存储。
辅助索引(非聚集索引):叶子节点不包含行记录的全部数据,除了包含键值外,还包含了一个书签。该书签用来告诉InnoDB存储引擎哪里可以找到与索引相对应的行数据,即聚集索引键。

辅助索引查询流程:首先遍历辅助索引,通过叶级别的指针获得指向主键索引的主键,然后再通过主键索引来找到一个完整记录行。

二、哈希索引

注意:InnoDB存储引擎会根据表的情况自动为表生成哈希索引,不能人为干预。

InnoDB存储引擎中的哈希算法:其冲突机制采用链接法,哈希函数采用除法散列方式。

链接法:把散列到同一槽(碰撞)中的所有元素都放在一个链表中。槽j中有一个指针,指向所有散列到j的元素构成的表头信息。
除法散列:关键字:K=space_id<<20+space_id+offset
哈希函数:h(K)=k mod m

space_id:来自InnoDB存储引擎的表空间的space_id;
offset:偏移量;
m:取值为略大于2倍的缓冲池页数量的质数;

三、全文索引
全文检索通常使用倒排索引+辅助表实现。