1.常见的索引结构有: B 树, B+树和 Hash,所针对的引擎是不同的。
2.为了提升查询的效率,要尽可能少的从磁盘中读取数据
3.同时要保证读取的数据足够有效,所以要分块读取
4.磁盘跟内存进行交互的时候,是以页为单位的,在进行数据读取的时候,一般都是读取的页的整数倍,innodb存储引擎默认读取的是16kb的数据
5.这时候,考虑使用树结构,二叉树,AVL,红黑树都有一个问题,树的分支只有两个,想要往这些树中结构插入更多的数据时,树的结构变得更深,导致次数变多,查询效率下降
6.基于此,考虑将二叉树变成多叉树,同于依托于有序的特点,多叉有序树,此时可以考虑B,B+树
7.而B树有这样的特点,在进行数据的检索时,数据和Key值是放在一起的,意味着在每一次读取数据时,每一个块,或者说每一个16kb的数据中,会存着索引数据+实际数据,而实际数据多了只后会占用大量的存储空间,造成树的分支的范围变小,导致想插入更多的数据时,深度又会增加
8.基于此,考虑将B树中的非叶子结点的数据放到叶子结点中,也就是非叶子结点中只存储Key的值,叶子结点中存储实际的数据
所以使用B+树