B-树、B+树
首先声明:B-树读作B树
MySQL底层使用B+树来存储索引数据
B-树
特点:
1、每个节点都可以存储多个数据;
2、每个节点的子节点树没有数量限制;
3、每个节点都存放这索引值和数据;所以搜索可能在非叶子节点结束,最好的情况为o(1);
4、任何一个关键字只会出现一次;
5、一般一棵B-树的高度在3层左右,因为3层就可以满足百万级别的数据量;
B+树:是B-树的一个变种
与B-树的区别:
1、叶子节点保存了完整的索引和数据,非叶子节点只保存索引值;
2、叶子节点是一个双向链表结构;这大大增加了区间访问性(局部性原理:如果一个存储器的某一个位置被访问,那么其相邻位置被访问的概率也很大;(磁盘预读原理));
3、B+树更适合外部存储;因为其非叶子节点只保存了索引值,单个元素所占空间就变小,但每次IO读取量是固定的,所以每次就可以读取出更多的节点,也就可以达到减少IO读取次数的目的;