InnoDB存储引擎支持以下几种常见的索引:B+树索引、全文索引、哈希索引。
哈希索引,InnoDB支持自适应哈希索引,会根据表的使用情况自动为表生成哈希索引。
B+树索引,不能找到一个给定键值的具体行,只能找到被查找数据行所在的页,然后数据库把页读入内存,再在内存中进行查找,最后找到要查找的数据。
B+树索引
B+树索引分为聚集索引和辅助索引,聚集索引的叶子节点存放的是一整行数据,辅助索引叶子节点存放的是主键数据。
聚集索引
InnoDB存储引擎是索引组织表,表中数据按照主键顺序存放,聚集索引就是按照每张表的主键构造一颗B+树,叶子节点存放的是行记录数据。索引聚集索引的数据也是索引的一部分,每个数据页通过一个双向链表来连接。
每张表只能有一个聚集索引。
聚集索引对于主键的排序查找和范围查找速度很快。
辅助索引
辅助索引也称非聚集索引,叶子节点不包含行记录数据,而是包含聚集索引键,也就是主键数据。
每张表可以有多个辅助索引。
联合索引
联合索引使用最左匹配。
覆盖索引
覆盖索引就是从辅助索引中就可以查到记录,而不需要从聚集索引中查询。
优化器选择不使用索引的情况
有些情况优化器不选择索引查找数据,而是扫描聚集索引,直接进行全表扫描来得到数据,一般发生在范围查找、JOIN链接操作等。
全文索引
全文索引通常使用倒排索引,在辅助表中存储了单词与单词自身在一个或者多个文档所在位置之间的映射。