B+树

B+ 树两个特征:

叶子存放了数据,而非叶子节点只是存放了关键字。

叶子节点被链表串联起来了。

B+ 树用于数据库索引有 3 大优势

B+ 树的高度和二叉树之类的比起来更低,树的高度代表了查询的耗时,所以查询性能更好。

B+ 树的叶子节点都被串联起来了,适合范围查询

B+ 树的非叶子节点没有存放数据,所以增删改时不用调整树结构,复杂度更低。

索引分类

这算是你在学习索引过程中一个非常容易迷惘的点,因为 MySQL 的索引站在不同的角度,就有不同的说法。

根据叶子节点是否存储数据来划分,可以分成聚簇索引和非聚簇索引。

如果某个索引包含某个查询的所有列,那么这个索引就是覆盖索引。

如果索引的值必须是唯一的,不能重复,那么这个索引就是唯一索引。

如果索引的某个列,只包含该列值的前一部分,那么这个索引就是前缀索引。比如说在一个类型是 varchar(128) 的列上,选择前 64 个字符作为索引。

如果某个索引由多个列组成,那么这个索引就是组合索引,也叫做联合索引。

全文索引是指用于支持文本模糊查询的索引。

哈希索引是指使用哈希算法的索引,但是 MySQL 的 InnoDB 引擎并不支持这种索引。

一个索引可以同时是覆盖索引、唯一索引、前缀索引和组合索引,你站在不同的角度去看待索引就会有不同的说法。

聚簇索引和非聚簇索引