`
darrenzhu
  • 浏览: 783334 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

B-树,B+树与B*树的优缺点比较

阅读更多

首先注意:B树就是B-树,"-"是个连字符号,不是减号。
B-树是一种平衡的多路查找(又称排序)树,在文件系统中有所应用。主要用作文件的索引。其中的B就表示平衡(Balance)

B+树有一个最大的好处,方便扫库,B树必须用中序遍历的方法按序扫库,而B+树直接从叶子结点挨个扫一遍就完了。

B+树支持range-query(区间查询)非常方便,而B树不支持。这是数据库选用B+树的最主要原因。

比如要查 5-10之间的,B+树一把到5这个标记,再一把到10,然后串起来就行了,B树就非常麻烦。B树的好处,就是成功查询特别有利,因为树的高度总体要比B+树矮。不成功的情况下,B树也比B+树稍稍占一点点便宜。

B树的优势是当你要查找的值处在非叶子节点时,当到该非叶节点时查找就成功并结束了,而B+树由于非叶节点只是索引部分,这些节点中只含有其子树中的最大(或最小)关键字,当非终端节点上的关键字等于给点值时,查找并不终止,而是继续向下直到叶子节点。因此在B+树中,无论查找成功与否,都是走了一条从跟到叶子节点的路径。

有很多基于频率的搜索是选用B树,越频繁query的结点越往根上走,前提是需要对query做统计,而且要对key做一些变化。
另外B树也好B+树也好,根或者上面几层因为被反复query,所以这几块基本都在内存中,不会出现读磁盘IO,一般已启动的时候,就会主动换入内存。
”mysql底层存储是用B+树实现的,因为内存中B+树是没有优势的,但是一到磁盘,B+树的威力就出来了。


B*树
是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针;B*树定义了非叶子结点关键字个数至少为(2/3)*M,即块的最低使用率为2/3(代替B+树的1/2);
B+树的分裂:当一个结点满时,分配一个新的结点,并将原结点中1/2的数据复制到新结点,最后在父结点中增加新结点的指针;B+树的分裂只影响原结点和父结点,而不会影响兄弟结点,所以它不需要指向兄弟的指针;
B*树的分裂:当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中兄弟结点的关键字(因为兄弟结点的关键字范围改变了);如果兄弟也满了,则在原结点与兄弟结点之间增加新结点,并各复制1/3的数据到新结点,最后在父结点增加新结点的指针;
所以,B*树分配新结点的概率比B+树要低,空间使用率更高;
分享到:
评论

相关推荐

    谷歌B-Tree的C++模板库

    C ++ B-树的容器,更好地利用高速缓存的搜索树的每个节点执行多个键比较。虽然B-树算法更复杂,红 - 黑树算法相比,提高缓存的行为可以解释在访问大型容器的显着加速。 C ++ B-树的容器也不是没有缺点,但是。与...

    数据通信与计算机网络作业答案Word版.doc

    1- 03试从多方面比较电路交换和分组交换的主要优缺点。(答案仅作参考,可自行补充完善 ) 1)在效率上,报文交换和分组交换不需要预先分配传输带宽,在传突发性数据时可提高 整个网络的信道利用率;而电路交换需要...

    毕业设计基于JAVA的springboot大学生体质测试管理系统-3(源代码+说明)

    本系统采用了B/S体系的结构,使用了java技术以及MYSQL作为后台数据库进行开发。系统主要分为系统管理员、教师和用户三个部分,系统管理员主要功能包括首页、个人中心、用户管理、教师管理、体质测试管理、测试报告...

    毕业设计基于JAVA的springboot大学生体质测试管理系统-2(源代码+说明)

    本系统采用了B/S体系的结构,使用了java技术以及MYSQL作为后台数据库进行开发。系统主要分为系统管理员、教师和用户三个部分,系统管理员主要功能包括首页、个人中心、用户管理、教师管理、体质测试管理、测试报告...

    毕业设计基于JAVA的springboot大学生体质测试管理系统-1(源代码+说明)

    本系统采用了B/S体系的结构,使用了java技术以及MYSQL作为后台数据库进行开发。系统主要分为系统管理员、教师和用户三个部分,系统管理员主要功能包括首页、个人中心、用户管理、教师管理、体质测试管理、测试报告...

    毕业设计基于JAVA的springboot大学生体质测试管理系统-4(源代码+说明)

    本系统采用了B/S体系的结构,使用了java技术以及MYSQL作为后台数据库进行开发。系统主要分为系统管理员、教师和用户三个部分,系统管理员主要功能包括首页、个人中心、用户管理、教师管理、体质测试管理、测试报告...

    cpp-lisp:用于C ++ 0x的Toy LISP实现

    对象类型象征缺点诠释细绳程序内置程序巨集特殊形式if do顺序评估所有参数,并返回上一个评估值。 quote def在global上创建变量绑定。 例如(def first (\ (list) (car list))) set! 将变量重新绑定为值。 let例如...

    谷歌 B-Tree C++ 模板库.

    谷歌开源团队同时也表示,C++ B-tree容器也不是没有缺点,与标准STL容器不同的是,修改C++ B-tree容器,会令所有未在该容器中的迭代器失效。出于这个原因,谷歌在该库中还增加了一个“安全”容器版本,安全容器中的...

    C/S、B/S的区别及优缺点

    C/S、B/S的区别及优缺点 第二、什么是B/S结构 二、C/S和B/S 之比较 (一)C/S 模式的优点和缺点  C/S 模式的优点  C/S 模式的缺点 (二)B/S模式的优点和缺点  B/S结构的优点  B/S 模式的缺点 (三)C/S、B...

    百套毕设之-java(正文+演示+源码)springboot4S店车辆管理系统.zip

    该系统基于B/S即所谓浏览器/服务器模式,应用java技术,选择MySQL作为后台数据库。系统主要包括首页、个人中心、销售员管理、维修员管理、客户管理、供应商信息管理、保险公司管理、车辆信息管理、物资信息管理、...

    C++数据结构知识点与经典算法整理

    13、B树、B-树、B+树、B*树、红黑树和trie树 44 14、最小生成树算法之Prim算法(C++实现) 49 15、最小生成树之kruskal算法 58 16、单源最短路径 62 三、算法部分 65 1、算法简介 65 2、实际算法 67 3、常用算法 73 四...

    B/S架构和C/S架构的区别和优缺点

    B/S架构和C/S架构的区别和优缺点 C/S又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的...

    最新150道MySQL大厂面试题课程

    015.索引的优缺点是什么? 016.使用索引一定能提升效率吗? 017.如果是大段文本内容,如何创建(优化)索引? 018.什么是聚簇索引? 019.一个表中可以有多个(非)聚簇索引吗? 020.聚簇索引与非聚集索引的特点是...

    百分百解决 springcloud项目添加context-path,调用方404问题

    框架,springcloud,nacos ...缺点:耦合高,难以维护 进行整改 B添加配置文件 spring: cloud: nacos: discovery: metadata: context-path: ${server.servlet.context-path} A依赖所提供的jar,即可完成调用

    企业级MySQL优化(从引擎为你介绍怎么优化、集群方案)

    本资源为博主原创MySQL优化方案,包括MySQL集群搭建(多主,双机热备)、讲解算法演变历程与算法解剖优缺点(时间/空间复杂度、hash开口/封闭寻址、二叉树、AVL平衡二叉树、红黑树、B-树、B+树、B*树)、MySQL引擎、...

    浅析BtoC网络经营优缺点.doc

    浅析BtoC网络经营优缺点.doc

    【转】深入研究B树索引

    NULL 博文链接:https://aindf0128.iteye.com/blog/657524

    分布式图数据库NebulaGraph的Index实践

    不同的数据库系统有不同的排序结构,目前常见的索引实现类型如B-Treeindex、B+-Treeindex、B*-Treeindex、Hashindex、Bitmapindex、Invertedindex等等,各种索引类型都有各自的排序算法。虽然索引可以带来更高的查询...

    论文研究-CE-Bézier与H-Bézier曲线的光滑拼接及应用.pdf

    为了进一步发展CE-Bézier曲线的相关理论,针对CE-Bézier曲线无法精确表示指数曲线、悬链线等超越曲线的缺点,利用CE-Bézier曲线与H-Bézier曲线间的拼接技术,来处理CE-Bézier曲线造型中指数曲线、悬链线等超越...

    计算机系统结构课后习题3

    3.8 简述延迟分支方法中的3种调度策略的优缺点。 答: 调度策略 优点 缺点 从前调度 总是可以有效提高流水线性能 分支必须不依赖于被调度的指令 从目标处调度 分支转移成功时,可以提高流水线性能。 由于...

Global site tag (gtag.js) - Google Analytics