B-Tree与B+Tree的区别

二叉树:html

左右两个子节点 能够为空数据库

二叉查找树:优化

左子树小于根节点,又子树大于根节点ui

平衡二叉树:spa

任何节点的左右两个子树的高度相差最大为1,(高度相差大于1会旋转操做).net

B-Tree:(平衡多路查找树)设计

B-Tree是为磁盘等外存储设备设计的一种平衡查找树指针

系统从磁盘中读取数据是以磁盘块为单位,一次会把统一磁盘的数据都读出来htm

索引引入的目的是为了快速查询以及更新表中的数据,是有序表,能够用二分查找提升效率blog

磁盘I/O操做是影响整个B-Tree查找效率的决定因素

若数据量很大则B-Tree的深度较大,增大查询时的磁盘I/O次数,进而影响查询效率(采用B+Tree的缘由)

B+Tree:

B+Tree是在B-Tree基础上的一种优化,使其更适合实现外存储索引结构

MySQL InnoDB引擎的索引底层实现采用的是B+tree

对于范围查找来讲,b+树只需遍历叶子节点链表便可,b树却须要重复地中序遍历。

B+Tree相对于B-Tree有几点不一样:

  1. 非叶子节点是叶子节点的索引,。
  2. 要存储的数据都存放在叶子节点中。
  3. 叶子节点之间都有一个链指针,不须要遍历整棵树就能够获得所存储的所有数据。
为何使用B+树?言简意赅,就是由于:
1.文件很大,不可能所有存储在内存中,故要存储到磁盘上
2.索引的结构组织要尽可能减小查找过程当中磁盘I/O的存取次数(为何使用B-/+Tree,还跟磁盘存取原理有关。)
3.局部性原理与磁盘预读,预读的长度通常为页数的整数倍
4.数据库利用磁盘预读原理,讲一个节点的大小设置为一页,这样每个节点只须要一次I/O就能够彻底载入
   而红黑树的结构,逻辑上很近的节点物理上可能很远,没法利用局部性
 
 
B+树比B树更合适做为索引的缘由 (这里面的两个图)
相关文章
相关标签/搜索