大家好,这里是IT技术百货,专注于有价值的IT技术知识分享;

今天跟大家分享数据库中的关键数据结构,B树与B+树

什么是B树

B树是一个满足以下条件的多叉树,一棵m阶B树满足如下条件:

  • 每一个节点最多有m个子节点
  • 除去叶子节点和根结点之外,其他节点至少有m/2个节点
  • 包含t个子节点的节点包含有t-1个key
  • 根结点如果不是叶子节点,那么至少要包含2个子结点
  • 每个节点的关键字从小到大排列,每一个关键字对应的左子树都小于这个关键字,右子树都大于这个关键字
  • 所有叶子节点都位于同一层

以上限定规则略显复杂,读起来可能也比较绕口,简言之就是限制每个节点的子结点个数,保证有序性以及每一个叶节点深度相同的三个特性;

B树是一种有序的数据结构,可以在log时间复杂度下完成插入、查找、删除操作;

插入操作:

自底部插入,如果满足节点个数的限制,则直接插入;如果不满足,那么一定是超出了节点个数限制,则进行调整;

调整的方式是将中间的元素插入到父节点,本身的节点分裂成两个节点(如果父节点个数也超出了继续按照这个规则调整);

举例:如下图,插入“39”这个节点,那么第二层最左边的节点个数超出了,因此将中间的节点升为父节点,本身分裂为两个节点,最终变为第二个图的样子。

插入1

插入之后

删除操作

删除操作略微复杂,但不同情形下都是有成熟的规则的,只要按照规则来就可以;(类似于拧魔方)

  1. 删除叶节点,并且删除之后 节点的key的个数满足多叉树要求,那么直接删除

case 1

  1. 删除叶节点,并且删除后不满足要求,则首先看前面的兄弟节点是否有>m/2个节点,如果>m/2个节点,那么就“借”一个,但这里并不是直接去借兄弟节点元素,是借父亲的元素,然后用兄弟节点元素来填补借的父元素。

删除元素22

  1. 如果删除之后,兄弟节点个数不大于m/2, 那么将父亲节点移到被删除元素的节点,然后跟兄弟节点合并;
  1. 删除非叶子节点,则用此节点的右子树第一个节点来填补,同时删除右子树的第一个节点

B+树

B+树是对B树的升级,主要改动如下:

  • 内部节点只存储索引,不存储数据;(这里类比聚簇索引和非聚簇索引就很明确了),对于B树来说,索引和数据会放在磁盘的同一个扇区中(或者是文件系统的同一个页中),而B+树不会;

存储划分

page=3的页中只存在索引,而数据存在其他页中;

  • 每一个叶子节点,都存有相邻叶节点的指针(双向链表)

采用双向链表的原因是为了方便处理"小于"的条件查询。

对比

B树和B+树都是多路查找树,目的都是为了解决多次访问磁盘,IO耗时太长的问题;

如果采用二叉树,虽然查找的时间复杂度没变,但是由于每一个节点可能在不同的页上,因此访问磁盘的次数增多。

B+树进一步优化了磁盘访问次数,将索引和数据分开存储,因此每一个页中存储的索引更多。

B+树的叶节点增加了指针链接,可以查询效率更高;

但同样的,B+树对查询的优化操作会降低了一定写入性能。

感谢浏览阅读,如果觉得内容有价值欢迎点赞,转发;喜欢请关注“IT技术百货”

怎么看b树是几阶_数据库原理基础:设计B树与B+树的目的以及二者的优劣相关推荐

  1. 高级架构师_Redis_第1章_缓存原理与设计

    高级架构师_Redis_第1章_ 缓存原理与设计 文章目录 高级架构师_Redis_第1章_ 缓存原理与设计 第一节 缓存原理与设计 1.1 缓存基本思想 1.11 缓存的使用场景 1.12 什么是缓 ...

  2. mysql设计思想_这些Mysql基础设计思路以及优化思路我都给你总结好了

    原标题:这些Mysql基础设计思路以及优化思路我都给你总结好了 1.定长和不定长要区分开 2.不常用的列和常用的列分开存 3.增加冗余,反范式化 4.btree索引,就是用树形结构存储在磁盘上,其中操 ...

  3. 怎么看b树是几阶_看我在B站上怎么学习的

    哔哩哔哩(bilibili)直播是国内首家关注 ACG 直播的互动平台.它不一定最宅,但一定宅得最萌;不一定最污,但是一定污得最优雅.游戏,手办绘画,Cos 等.这是B站官网介绍,大部分人看到B站想到 ...

  4. 插入的数据不能时时查询到_数据库原理笔记

    转载自:https://zhuanlan.zhihu.com/c_1236597039825223680 数据库系统的基本概念 数据:描述事物的符号记录 数据库(DB):长期存储在计算机内,有组织,可 ...

  5. mysql储存过程是什么意思_数据库原理mysql储存过程

    如大家所知道的,Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE. 那么,这几种索引有什么功能和性能上的不同呢? FULLTEXT 即为全文索引,目前只有MyI ...

  6. select每门可说大于90分_数据库原理与应用期末试题及其答案

    一. 单项选择题(每小题1分,共10分) 1. A.模式 B. C...模式与外模式的映射......... D..... 2.下列四项中,不属于数据库特点的是( ) A.数据共享 B. C.数据冗余 ...

  7. mysql上机心得体会_数据库原理上机心得体会

    数据库 资料 心得 C和数据库都一样,都得花时间写各式各样的代码-- 开始学最好得买些书看,然后就自己开始尝试 慢慢地就会了 学数据库看你想从哪个开始学 一般都SQL SERVER 或ACCESS开始 ...

  8. mysql中db的名词解释_数据库原理名词解释

    名词解释 实体有联系,反之型DML. 关系中元组在将SQL语句嵌涉及到U中属性1 DB是统一管理亦然,则称实体集嵌入在宿主语组成主键的属性入在高级语言的的函数依赖集,如的相关数据的集E1对E2的联系言 ...

  9. 人事管理java 课程设计_数据库+Java课程设计 人事管理系统 (一)

    一.JAVA与数据库的合作 此次开发语言为Java,所用的数据库驱动是mysql-connector-java-5.1.8-bin.jar 第一步   用Java连接MySQL数据库(驱动下载:htt ...

最新文章

  1. 树状数组与离散化与求第K大模板
  2. 2.3.2 进程互斥的软件实现方法
  3. 三维重建:SLAM的尺度和方法论问题
  4. php tostring(),【php】“__toString()”方法使用,php__tostring
  5. 友声电子秤设置软件_友声电子秤说明书/操作指南?(一)
  6. halcon中如何生成椭圆_Halcon拟合系列(2)直线/圆/椭圆/矩形拟合算子
  7. 【渝粤题库】陕西师范大学290001 计算机网络
  8. 深入浅出Python——Python高级语法之异常、模块、包
  9. 成品app直播源码,RecyclerView实现自动滚动效果
  10. 单片机实验中用到的元器件(Multisim14)
  11. 基于udp端口转发程序设计(一)
  12. android 渐变蒙版_PPT教程 | 渐变蒙版
  13. wine linux安装目录,[Linux]WINE安装教程
  14. 在mudbuilder上的胡扯3
  15. 命令模式,升级版的灭霸响指
  16. 解决 Flutter 在 iOS 模拟器中运行卡住问题
  17. 算法python实现_Relief算法python实现
  18. 鼎新TIPTOP GP5.25鼎捷易拓GP5.25视频教程26模块操作及开发
  19. 傅里叶级数、傅里叶变换、量子傅里叶变换(学习笔记)
  20. 【从0开始C语言(自学记录)】system函数

热门文章

  1. React中refs的理解
  2. 手机python3ide加法器_Python3开发常用工具
  3. 二叉树层序遍历_求二叉树的层序遍历
  4. Mysql梳理(单表查询)
  5. 敏捷开发人员结构_开发人员可以在敏捷外观方面发表意见的4种方法
  6. 创建维护计划失败_如何善于创建和维护大型系统
  7. 香蕉派,蜘蛛侠手臂和USO世界
  8. 分布式ID | 这六种分布式ID生成方法,总有一款适合你
  9. ECMAScript 的发展历史
  10. “啁啾”看完这篇再不懂,放弃吧……