<span>026-B树(一)</span>

 

数据库系统的设计者巧妙利用了磁盘预读原理:

       将一个节点的大小设为等于一个页,这样每个节点需要一次I/O就可以完全载入

这是数据库最为重要且极为巧妙的设计。

为了达到这个目的,在实际实现B-Tree还需要使用如下技巧:

      每次新建节点时,直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个node只需一次I/O。

      而B+树内把真实的数据全部放在了叶子节点中,非叶子节点中只存放了索引的数据,保证了数据项尽可能的多。保证树的高度。

 

 

定义:

 

描述一颗 B树时需要指定它的阶数,阶数 表示 此树的结点 最多 有 多少个孩子结点(子树),一般用字母 M 表示阶数。

 

M 阶的B树 :以【子树】讨论

 

  • 上限:每个节点最多有 M 个子树
  • 下限:
    根节点至少2个子树,
    非根节点至少有⌈M /2⌉个子树

 

所以也称 M 阶B树 为 ( ⌈M /2⌉ , M ) 树 ,即超级节点(除根节点)的子树数的上下限 。

 

注: 超级节点关键码的个数 = 节点子树数 - 1 。

 

例:

 

M = 4 阶,(2, 4)树。 最多含有 3个关键字 和 4个子树 M = 5 阶,(3, 5)树。 最多含有 4个关键字 和 5个子树 M = 6 阶,(3, 6)树。 最多含有 5个关键字 和 6个子树 

 

  • 1
  • 2
  • 3

 

所以,M阶 可理解为 M树,即内含(M-1)个关键字 和 M 个子树。

 

      

 

 

 

 

 

 

 

通过这个结构我们可以看见,在叶子节点中存储的数据是age,name,address的值(假设这些数据都是按照顺序排列好的,图中是随意写的),那么如果我们只想要这几个值的话,都不需要再进行主键定位查询了,提高了一些效率。

小结:

InnoDB的聚集索引是按照主键搜索,是最高效的,辅助索引需要走两次索引,首先查询辅助索引得到主键,再跟进主键查询获得记录。

问题1:不建议主键字段过长:原因上面第2点也讲过一些,过长会造成数据项空间变大,每个节点数据项数目变少,高度增加。

另外我们发现辅助索引的data域记录的也是主键,因此简介造成辅助索引变大,查询困难。

问题2:非单调字段:如果不是单调字段的话,会造成B+树不断的调整,十分低效,上一篇分析过插入和删除。使用自增字段的话会保持一个相对稳定的顺序。

 

 

 

1、内节点:非根非叶子节点,即非根的分支节点。

2、名称:B-树=B树=平衡多路查找树。

3、定义:m阶B树。

  (0)、根节点孩子数rootChildNum范围:若没有孩子节点则孩子数为0,若有孩子则:2 <= rootChildNum <= m

  (1)、树中每个节点的孩子树个数childNum范围:2 <= childNum <= m

  (2)、内节点孩子个数innerChildNum的范围: ceil(m/2) <= innerChildNum <= m

  (3)、节点数据个数dataNum与节点孩子个数childNum关系:childNum = dataNum + 1。而且数据递增排列。

  (4)、所有叶子节点处于同一层次。

4、一颗B树的高度h与节点数n的不等关系建立:

第一层节点数:最少 1

第二层节点数:最少 2

第三层节点数:最少 2 × ceil(m/2)

第四层节点数:最少 2 × ceil(m/2) × ceil(m/2)

依次类推。。。。。。。。。

第h层节点数:最少 2 × [ ceil(m/2) ]h-2

因此高度为h的B树中节点树的最小值为:

 

全部评论

相关推荐

明明就不饿:看不懂你到底会啥,什么岗位
点赞 评论 收藏
分享
03-15 10:59
已编辑
美团_后端开发(实习员工)
爱写代码的菜code...:哎,自己当时拿到字节offer的时候也在感叹终于拿到了,自己当时最想去的企业就是字节,结果还是阴差阳错去了鹅厂。祝uu一切顺利!!!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
7549次浏览 68人参与
# 你的实习产出是真实的还是包装的? #
1426次浏览 37人参与
# 米连集团26产品管培生项目 #
5152次浏览 208人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7218次浏览 38人参与
# 简历第一个项目做什么 #
31401次浏览 317人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
186653次浏览 1116人参与
# MiniMax求职进展汇总 #
23387次浏览 304人参与
# 研究所笔面经互助 #
118814次浏览 577人参与
# 重来一次,我还会选择这个专业吗 #
433143次浏览 3924人参与
# 简历中的项目经历要怎么写? #
309747次浏览 4172人参与
# 面试紧张时你会有什么表现? #
30432次浏览 188人参与
# AI时代,哪些岗位最容易被淘汰 #
62996次浏览 764人参与
# 正在春招的你,也参与了去年秋招吗? #
362936次浏览 2635人参与
# 你怎么看待AI面试 #
179594次浏览 1197人参与
# 职能管理面试记录 #
10763次浏览 59人参与
# 网易游戏笔试 #
6402次浏览 83人参与
# 腾讯音乐求职进展汇总 #
160489次浏览 1107人参与
# 校招笔试 #
468616次浏览 2959人参与
# 把自己当AI,现在最消耗你token的问题是什么? #
7071次浏览 156人参与
# 你觉得通信/硬件有必要实习吗? #
155408次浏览 1065人参与
# 小红书求职进展汇总 #
226976次浏览 1357人参与
# 从哪些方向判断这个offer值不值得去? #
56718次浏览 357人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务