B+树为什么比B树强大?
我们先来看看他们的图形结构:
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树强大?相关推荐
- c语言 trie树,数据结构篇——字典树(trie树)
引入 现在有这样一个问题, 给出$n$个单词和$m$个询问,每次询问一个单词,回答这个单词是否在单词表中出现过. 好像还行,用 map ,几行就完事了. 那如果n的范围是 $10^5$ 呢?再用 $m ...
- 模板 - 树上问题(树的直径、动态查询树的直径、树的重心)
整理的算法模板合集: ACM模板 目录 一.树的直径 树形DP 两次DFS / BFS(找到直径的两个端点) 二.动态修改树的边权并求每个时刻的直径(线段树) 三.树的重心 一.树的直径 树的直径满足 ...
- 解题报告:P3834 【模板】可持久化线段树 2(主席树)详解
P3834 [模板]可持久化线段树 2(主席树) 题解 P3834 [[模板]可持久化线段树 2(主席树)] 1)静态求第k大数 可持久化线段树,不能用堆的方法存子结点了,所以用指针l表示左儿子r表示 ...
- 句法分析语料:宾州树库、UD树库
句法分析语料:宾州树库.UD树库 目录 句法分析语料:宾州树库.UD树库 宾州树库 UD树库
- Boosting、Adaboost、AdaBoost模型的优缺点、提升树、梯度提升树GBDT
Boosting.Adaboost.AdaBoost模型的优缺点.提升树.梯度提升树GBDT 目录 Boosting.Adaboost.AdaBoost模型的优缺点.提升树.梯度提升树GBDT Boo ...
- 决策树ID3、决策树C4.5、决策树CART、CART树的生成、树的剪枝、从ID3到CART、从决策树生成规则、决策树优缺点
决策树ID3.决策树C4.5.决策树CART.CART树的生成.树的剪枝.从ID3到CART.从决策树生成规则.决策树优缺点 目录
- 暑假集训8.10-网络流套树剖套线段树
题目:dtoj2797旅行商 其实就是裸的网络流套树剖套线段树其实代码不难码 emmmmmm我决定草率的直接上代码,这可能是一条无营养的博客.... #include<bits/stdc++.h ...
- 平衡查找树C语言程序,树4. Root of AVL Tree-平衡查找树AVL树的实现
对于一棵普通的二叉查找树而言,在进行多次的插入或删除后,容易让树失去平衡,导致树的深度不是O(logN),而接近O(N),这样将大大减少对树的查找效率.一种解决办法就是要有一个称为平衡的附加的结构条件 ...
- 从B 树、B+ 树、B* 树谈到R 树
作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由weedge完成,R 树部分由Frank ...
- 输入一颗二元查找树,将该树转换为它的镜像
题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点. 例如输入: 8 / \ 6 10 /\ /\ 5 7 9 11 输出: 8 / \ 10 6 ...
最新文章
- Android Activity启动模式,回退栈管理!
- 一系列用于Fuzzing学习的资源汇总
- Android使用RxJava+Retrofit2+Okhttp+MVP练习的APP
- 廖雪峰python教程百度云-廖雪峰Python教程的配套视频教程,全套完整版!
- 高通平台device tree生成platform device的过程(MSM8909)
- ie浏览器不支持多行隐藏显示省略号
- c++排序算法ppt_C/C++学习教程:C语言排序算法—插入排序算法
- html中的文本格式化标签+多媒体标签+关于IE浏览器兼容的问题(干货!)
- 基于JAVA+Servlet+JSP+MYSQL的学生宿舍卫生评分系统
- shell类型、添加PATH环境变量、.bashrc、.profile、/etc/profile、/etc/environment
- 学大数据要学哪些算法_大数据学习之不得不知的八大算法
- OpenCV c接口与c++接口
- SQL Server代码如何快速格式化
- 易买网(注册Ajax讲解)
- 在实时控制系统中使用传感器优化数据可靠性的3个技巧
- gta5怎么设置画质最好_GTA5画面如何设置最好_GTA5画质设置成最高配置推荐-win7之家...
- 测试局域网或wifi实际最大带宽
- MYSQL 数据库给表加约束条件 (史上最详细教程!)!!
- 【Pygame小游戏】Python版有迷宫嘛?原来藏在个地方呀~
- 电源设计满足更大功率密度的需要