我们先来看看他们的图形结构:

B树

如图一个三层的b树,查询元素(主键)29

查询过程

1,第一次磁盘IO,把9所在节点读到内存,把目标数29依此和17、35比较,17<29<35,找P2指针对应的磁盘块3;

2,第二次磁盘IO,还是读节点到内存,在内存中把29依次和26、30比较,同理找到P2指针对应的磁盘块8;

3,第三次磁盘IO,跟第二步一样,然后就找到了目标29。

//如果查找非叶子结点的关键字26,则只需要IO两次,直接返回。

B+树

B+树:同样查询查询元素29

查询过程

IO情况同B树。

不同点:

因为非叶子结点只存放了键值和指针,不存放数据,一个磁盘块可以存放更多的主键,所以3层的B+树可以表示上百万的数据。而B树的结构限制,不足以支持这么多的数据。

而锁定磁盘块指针,消耗内存时间因为非常短(相比磁盘的IO)可以忽略不计。

//但是如果查非叶子结点的关键字,如36,也需要IO三次到叶子结点,因为叶子结点才有数据。

总结

B+树相比B树优化之处:

1:稳定性优化——B树的关键字分布在整颗树中,同一个关键字只会出现一次。B+树可能会出现多次,所有的叶子结点中包含了全部关键字的信息,B树搜索有可能在非叶子结点就结束搜索,而B+树必须搜索到叶子结点,但是锁定磁盘块指针消耗可以忽略不计;

2:相同层级数数据量增加,减少IO次数——B树中间节点会保存数据,B+树的中间节点不保存数据,磁盘页能容纳更多关键字和指针信息,更“矮胖”,树的层高能进一步被压缩;

3:范围查找优化——B+树叶子结点本身依关键字的大小自小而大顺序排列而且允许链接(有序链表),只需遍历叶子节点链表即可,b树却需要重复地遍历树。

B+树为什么比B树强大?相关推荐

  1. c语言 trie树,数据结构篇——字典树(trie树)

    引入 现在有这样一个问题, 给出$n$个单词和$m$个询问,每次询问一个单词,回答这个单词是否在单词表中出现过. 好像还行,用 map ,几行就完事了. 那如果n的范围是 $10^5$ 呢?再用 $m ...

  2. 模板 - 树上问题(树的直径、动态查询树的直径、树的重心)

    整理的算法模板合集: ACM模板 目录 一.树的直径 树形DP 两次DFS / BFS(找到直径的两个端点) 二.动态修改树的边权并求每个时刻的直径(线段树) 三.树的重心 一.树的直径 树的直径满足 ...

  3. 解题报告:P3834 【模板】可持久化线段树 2(主席树)详解

    P3834 [模板]可持久化线段树 2(主席树) 题解 P3834 [[模板]可持久化线段树 2(主席树)] 1)静态求第k大数 可持久化线段树,不能用堆的方法存子结点了,所以用指针l表示左儿子r表示 ...

  4. 句法分析语料:宾州树库、UD树库

    句法分析语料:宾州树库.UD树库 目录 句法分析语料:宾州树库.UD树库 宾州树库 UD树库

  5. Boosting、Adaboost、AdaBoost模型的优缺点、提升树、梯度提升树GBDT

    Boosting.Adaboost.AdaBoost模型的优缺点.提升树.梯度提升树GBDT 目录 Boosting.Adaboost.AdaBoost模型的优缺点.提升树.梯度提升树GBDT Boo ...

  6. 决策树ID3、决策树C4.5、决策树CART、CART树的生成、树的剪枝、从ID3到CART、从决策树生成规则、决策树优缺点

    决策树ID3.决策树C4.5.决策树CART.CART树的生成.树的剪枝.从ID3到CART.从决策树生成规则.决策树优缺点 目录

  7. 暑假集训8.10-网络流套树剖套线段树

    题目:dtoj2797旅行商 其实就是裸的网络流套树剖套线段树其实代码不难码 emmmmmm我决定草率的直接上代码,这可能是一条无营养的博客.... #include<bits/stdc++.h ...

  8. 平衡查找树C语言程序,树4. Root of AVL Tree-平衡查找树AVL树的实现

    对于一棵普通的二叉查找树而言,在进行多次的插入或删除后,容易让树失去平衡,导致树的深度不是O(logN),而接近O(N),这样将大大减少对树的查找效率.一种解决办法就是要有一个称为平衡的附加的结构条件 ...

  9. 从B 树、B+ 树、B* 树谈到R 树

    作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由weedge完成,R 树部分由Frank ...

  10. 输入一颗二元查找树,将该树转换为它的镜像

    题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点. 例如输入: 8 / \ 6 10 /\ /\ 5 7 9 11 输出: 8 / \ 10 6 ...

最新文章

  1. Android Activity启动模式,回退栈管理!
  2. 一系列用于Fuzzing学习的资源汇总
  3. Android使用RxJava+Retrofit2+Okhttp+MVP练习的APP
  4. 廖雪峰python教程百度云-廖雪峰Python教程的配套视频教程,全套完整版!
  5. 高通平台device tree生成platform device的过程(MSM8909)
  6. ie浏览器不支持多行隐藏显示省略号
  7. c++排序算法ppt_C/C++学习教程:C语言排序算法—插入排序算法
  8. html中的文本格式化标签+多媒体标签+关于IE浏览器兼容的问题(干货!)
  9. 基于JAVA+Servlet+JSP+MYSQL的学生宿舍卫生评分系统
  10. shell类型、添加PATH环境变量、.bashrc、.profile、/etc/profile、/etc/environment
  11. 学大数据要学哪些算法_大数据学习之不得不知的八大算法
  12. OpenCV c接口与c++接口
  13. SQL Server代码如何快速格式化
  14. 易买网(注册Ajax讲解)
  15. 在实时控制系统中使用传感器优化数据可靠性的3个技巧
  16. gta5怎么设置画质最好_GTA5画面如何设置最好_GTA5画质设置成最高配置推荐-win7之家...
  17. 测试局域网或wifi实际最大带宽
  18. MYSQL 数据库给表加约束条件 (史上最详细教程!)!!
  19. 【Pygame小游戏】Python版有迷宫嘛?原来藏在个地方呀~
  20. 电源设计满足更大功率密度的需要

热门文章

  1. python 将图片拼接,美图秀秀拼图
  2. 选开源报表还是商用?2018最新试用三款报表软件产品的感受
  3. linux内核态发送tcp包,linux tcp/ip协议及内核参数分析与调优
  4. 运营小技能:订阅号文章如何添加图文超链接?
  5. java-php-python-ssm学生课堂互动教学系统计算机毕业设计
  6. 中日韩汉字Unicode编码表
  7. Mac上用优盘怎么才能写入和修改
  8. java 一笔一划 写汉字_一笔一划写汉字
  9. 一文学会Linux安装Mysql5.7(解压方式),加上配置详解,帮你完美避坑
  10. 怎样验证联想笔记本电脑--是否为正品行货