innodb中的索引主要分为三种:
B+树索引
全文索引
哈希索引
B+树索引
B+树索引基于B+树,信息储存在叶子节点,其他节点只包含键值的信息。数据库通过B+树找到被查询数据所在页,将页读取到内存中后,再进行查找。
innodb中的B+树索引分为聚簇索引和非聚簇索引(又称辅助索引),两者区别在于**叶子节点是否存在一整行信息**。
聚簇索引
聚簇索引按照每张表的主键建B+树,树的叶子节点存放着整张表的行记录数据,因此也将聚簇索引的叶子节点称为数据页,叶子节点的数据页通过双向链表进行连接。
由于数据的排列只有一种,因此一张表只能拥有一个聚簇索引。
非聚簇索引
非聚簇索引的叶子节点不包含行记录信息,包含的是行记录对应的主键值。通过非聚簇索引查询时,会首先找到行记录对应的聚簇索引,再通过聚簇索引找到对应的行记录。因此一张表可以存在多个非聚簇索引。
常见的非聚簇索引包括**单列索引、联合索引**。单列索引就是常见的单列但不是聚簇索引的索引,联合索引指对表上的多个列建立索引,联合索引也是一棵B+树,但是B+树的键值的数量不是1,而是大于1(即联合索引的列)。
因此,对于联合索引,必须按照建立索引的顺序进行查询,否则索引会失效。
另外,innodb还支持覆盖索引,即通过查询非聚簇索引即可获取到需要的所有信息,而不需要回表查询(重新通过聚簇索引查询),这种方式能够提高检索速度,且大小远小于聚簇索引。
全文索引
全文索引通常通过倒排索引实现,即,将文章中的每个单词作为key,将这个单词出现的行(可能再加上是第几个单词)这些坐标信息作为value,构建映射关系。
哈希索引
哈希索引是innodb系统自适应生成的,不能人工干预