InnoDB存储引擎支持的索引:
- B+树索引
- 哈希索引
- 全文索引
一、B+树索引
注意:
- B+树索引不能找到一个给定键值的具体行,只能找到数据行所在的页,然后数据库通过把页读入到内存中,再在内存中进行查找。
- 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倍的缓冲池页数量的质数;
三、全文索引
全文检索通常使用倒排索引+辅助表实现。