我们都知道MySQL是使用B+Tree来存储索引的,但是B+Tree有什么优势呢,我们一起来研究一下吧.
常见的数据存储结构
- 二叉树
- 红黑树
- B-Tree树
- B+Tree树
二叉树
- 每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点
- 左子树和右子树是有顺序的,次序不能任意颠倒
- 即使树中某结点只有一棵子树,也要区分它是左子树还是右子树
二叉树相对于全表扫描是有优势的,相当于二分查找提高了检索速度;
红黑树
红黑树又叫平衡二叉树,拥有自平衡功能,极端情况下二叉查找树会形成一个链表结构而红黑树就不会出现这种情况;
- 每个节点不是红色就是黑色
- 根节点是黑色的
- 一个节点时红色的那它的子节点是黑色的
- 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点
B-Tree (B树)
B-Tree又叫平衡多路查找树
红黑树的查询速度已经很高了,但是存在磁盘IO过多的问题,磁盘IO交互是非常耗时的,为了解决这个问题B-Tree出现了;
相对于二叉树,B-Tree每个节点有多个分支,即多叉;
二叉树的高度决定了查询时IO交互的次数,B-Tree每个节点存储多个索引;这样树的高度得以降低,这样就降低了IO次数,提高了查询效率;
根二叉树相比,相同的数据B-Tree的深度更低;
B+Tree
MySQL索引使用的存储结构
B+Tree和B-Tree思想都差不多,B+Tree和B-Tree的结构又些许变化
- B+Tree所有数据信息存储在叶子节点
- 非子节点只保存索引信息不保存数据信息,这样非叶子节点每个节点能保存的数据更多;