-
B-树和B+树原理详解:https://blog.csdn.net/ywlmsm1224811/article/details/97890446
-
深入理解MySQL索引之B+Tree: 写得好!InnoDB和MyISEM的区别也很清楚。https://blog.csdn.net/b_x_p/article/details/86434387
-
MySQL索引详解:写得超详细。https://blog.csdn.net/IT_10/article/details/95488179
-
MyISAM和InnoDB的区别:超详细https://blog.csdn.net/helloxiaozhe/article/details/88601028
-
B-树和B+树区别:
- b+树的中间节点不保存数据,(一般一个节点大小为一个磁盘页) 所以磁盘页能容纳更多节点元素,更“矮胖”;
- b+树查询必须查找到叶子节点,b树只要匹配到即可不用管元素位置,因此b+树查找更稳定;
- 叶子节点之间有指针,链式。对于范围查找来说,b+树只需遍历叶子节点链表即可。
-
为啥最终选择了B+树作为MySQL的结构:
B+Tree是B TREE的变种,B TREE能解决的问题,B+TREE也能够解决(降低树的高度,增大节点存储数据量)
B+Tree扫库和扫表能力更强。如果我们要根据索引去进行数据表的扫描,对B TREE进行扫描,需要把整棵树遍历一遍,而B+TREE只需要遍历他的所有叶子节点即可(叶子节点之间有引用)。
B+TREE磁盘读写能力更强。他的根节点和支节点不保存数据区,所以根节点和支节点同样大小的情况下,保存的关键字要比B TREE要多。而叶子节点不保存子节点引用,能用于保存更多的关键字和数据。所以,B+TREE读写一次磁盘加载的关键字比B TREE更多。
B+Tree排序能力更强。上面的图中可以看出,B+Tree天然具有排序功能。
B+Tree查询性能稳定。B+Tree数据只保存在叶子节点,每次查询数据,查询IO次数一定是稳定的。当然这个每个人的理解都不同,因为在B TREE如果根节点命中直接返回,确实效率更高。
阿龙的学习笔记--- B-树和B+树 以及 MySQL的索引机制总结
最新推荐文章于 2021-07-12 14:46:17 发布