B 树

lobo · 2018-09-04 14:35:11 · 2323 次点击 · 预计阅读时间不到 1 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2018-09-04 14:35:11 的文章,其中的信息可能已经有所发展或是发生改变。

有B树、B+树、B*树,没有B- 树

一、B-tree (B树)

image.png

1、每个结点至多有m颗子树;

2、除根结点外,所有非终端结点至少有[ m/2 ] ( 向上取整 )颗子树;

3、若根结点不是叶子结点,则至少有两颗子树;

4、所有的叶子结点都出现在同一层次上;

5、一个非终端结点包含k个子节点和k-1个key

二、B+tree

image.png

1、B+树由B树和索引顺序访问方法演化而来;

2、B+树是为磁盘或其他直接存取辅助设备而设计的一种平衡查找树;

3、B+树中,所有记录节点都是按键值的大小顺序存放在同一层的叶节点中,各叶节点指针进行连接;

4、叶节点存放着所有的数据;

三、InnoDB主键索引B+树 ???? https://www.cnblogs.com/leefreeman/p/8315844.html

1、树的高度通常是1-3;

2、树可以存放约2千万数据;

注:在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是512字节,而文件系统(例如XFS/EXT4)他的最小单元是块,一个块的大小是4k,而对于我们的InnoDB存储引擎也有自己的最小储存单元——页(Page),一个页的大小是16K。


有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2323 次点击  
加入收藏 微博
1 回复  |  直到 2019-04-25 21:43:34
lobo
lobo · #1 · 6年之前

1.B+树是应文件系统产生的B树的变种。它依然是一颗多路查找树,与B树相比它的不同体现在:

(1).如果非叶子节点包含n个关键码,则这个节点有n个子树。

(2).非叶子节点仅包含关键码信息,叶子节点包含关键码以及含有这个关键码的记录的指针。所以查找时,B+树必须到达叶子节点才会命中。

(3).叶子节点包含有兄弟叶子节点的指针,而且叶子节点的关键码值是有序的,有利于遍历。

(4).所有的非叶子节点可看成是索引部分(稀疏索引)

2.为什么说B+树比B树更适合实际应用中作为操作系统的文件索引和数据库索引?

(1)B+树的磁盘读写代价更低

非叶子节点包含的信息更少,如果把同一节点的所有信息放在一个磁盘块中,则可以比B树放入更多的关键码。一次读入内存当中(读一个块)就能读入更多的关键码,所以降低了磁盘I/O总数。

(2)查询效率更加稳定

对任何关键字的查找都必须从根节点走到叶子节点,路径长度相同,所以对每条数据的查询效率相当。

(3)B树在提高磁盘I/O性能的同时并没有解决元素遍历效率低下的问题。而B+树因为叶子节点有链指针存在,所以遍历叶子节点即可以实现对整棵树的遍历。而在数据库中基于范围的查询是非常频繁的,B+树就能更好的支持。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传