浅浅谈一谈B树和B+树

news2025/2/24 9:33:24

目录:

🚀1.B树

🚀2.B+树

索引背后的数据结构是啥呢,是B+树,是为了数据库索引设计的,我们可以先了解B树,再说B+树

1.什么是B树

B树也叫B-树,这里的-不读减,是一个符号

我们已经学过了二叉搜素树,B树其实就是N叉搜素树,二叉搜索树只能在每一个结点放一个key,所以树的高度就很高,而N叉搜索树一个结点可以放多个key,高度大大降低,现在通过画图的形式来进行理解

 这就是一个B树,结点的子树越多,那么树的高度就越低,树的高度越低,那么访问硬盘的次数就越少,这有利于提高查询效率

什么是B+树

B+树也是N叉搜索树,其实有点像,但是还是有区别的,继续画图来看

 观察这个树,子结点中含有每个结点key的值

那么在查询的时候是以一个范围进行查询,B+树的最后一层的结点可以连接成一个单链表

如下图

就算查的数字在这个树里没有,那么只要通过范围圈出链表的一个范围即可

B+树实现了数据库的索引,那么举个例子,假如要插入一个学生,有id,name,number,address,等,

在B树中就相当于每一个结点的key值中存着这一行数据,比如30,就存着这个学生的所有数据,那么假如就要查30,就查到第一层就可以了,

如果是B+树,那么除了最后一层的结点是存储完整数据的,其他结点是不存该学生的所有信息的,只会存ID,那查询的时候必须查到最后一层才能拿到完整的数据

那么如果没有id ,那就不能使用索引了,因为使用B+树的前提是可比较的key值

在这个结构中,默认是id作为表主键的,

那么如果一个表里有多个索引呢,id是主键索引,那么针对name 也有一个索引

在建造B+树的时候还是按照id为主键建的,在叶子结点中有所有数据

针对name 这个索引,我们需要再创建一个B+树,这个树的叶子结点不保存完整数据,只保存id,在根据name查询的时候,只能查到id,还需要到以id为主键为索引创建的B+树中,再次查询,查到这个树里的叶子结点,才可以查到完整数据

这就叫回表过程,是由mysql自动完成的.

B+树就是mysql组织数据的方式

一张表的结构可能是表结构,也可能是树结构,取决于有没有索引,以及数据库使用的存储引擎

说了这么多,来总结一下

先来说一下B+树的特点

1.一个结点,可以存储N个key,N个key划分N个区间(B树划分的是N+1个区间)

2.每个结点的key的值都会在叶子结点中存在

3.B+树的叶子结点是首尾相连的,类似链表

4.只会在叶子结点上存储完整的行数据,非叶子结点只有key值

现在来说一说B+树的优点

1.一个结点可以存更多的key值,那么树的高度更矮,减少访问硬盘次数

2.所有的查询都会落到叶子结点上(访问的IO次数是一样的,这里的IO次数是指硬盘访问次数)

3.B+树的所有叶子结点构成一个链表,方便范围查询

4.完整的数据都存在叶子节点上,非叶子结点只会存储key,这些非叶子结点可能会存储在

内存中,那么又进一步减少了硬盘访问次数

B树的特点

1.一个结点可以存N个key值,N个key划分N+1个区间

2.每个结点都存储完整的行数据

3.每个结点的key的值在叶子结点中不会出现

4它的叶子结点不存在首尾相连的链表关系

B树的优点

1..一个结点可以存更多的key值,那么树的高度更矮,减少访问硬盘次数

2.所有的查询会落到每一个结点上,查询的速度也很快

今天的讲解就到这里,我们下期见

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/380425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HCIP-5OSPF基本原理及基本配置学习笔记

1、OSPF基本原理 开放式最短路径优先OSPF(Open Shortest Path First)协议是IETF定义的一种基于链路状态的内部网关路由协议。 RIP是一种基于距离矢量算法的路由协议,存在着收敛慢、易产生路由环路、可扩展性差等问题,目前已逐渐被…

C++---最长上升子序列模型---合唱队形(每日一道算法2023.3.1)

注意事项: 本题为"线性dp—最长上升子序列的长度" 和 “最长上升子序列模型—怪盗基德的滑翔翼” 和 “最长上升子序列模型—登山” 的扩展题,所以dp思路这里就不再赘述。 题目: N位同学站成一排,音乐老师要请其中的 (…

【C++】构造函数(初始化列表)、explicit、 Static成员、友元、内部类、匿名对象

构造函数(初始化列表)前提构造函数体赋值初始化列表explicit关键字static成员概念特性(重要)有元友元函数友元类内部类匿名对象构造函数(初始化列表) 前提 前面 六个默认成员对象中我们已经学过什么是构造…

1.4 黑群晖安装:SataPortMap和DiskIdxMap两种获取方式

tinycore及安装工具下载:工具:链接:https://pan.baidu.com/s/1CMLl6waOuW-Ys2gKZx7Jgg?pwdchct提取码:chcttinycore:链接:https://pan.baidu.com/s/19lchzLj-WDXPQu2cEcskBg?pwddcw2 提取码:d…

【博学谷学习记录】超强总结,用心分享丨人工智能 深度学习 神经网络基础知识点总结

目录神经网络激活函数引入激活函数原因:sigmoid激活函数tanh 激活函数ReLU 激活函数(最常用)SoftMax如何选择反向传播参数初始化方法优化方法正则化批量归一层网络模型调优的思路神经网络 简单的神经网络包括三层:输入层&#xf…

CentOS8基础篇10:网络环境配置

管理员为了能够更好的管理和维护网络,需要配置服务器的网络环境,再将服务器部署到网络环境中。为此他需要完成以下工作: 设置临时主机名为Server。 设置网卡信息:IP地址为192.168.137.5,子网掩码是255.255.255.0&#…

Docker 安装GitLab学习笔记

1.环境准备 1.1安装虚拟机 采用Vitualbox7.0安装ubuntu-22.04.1-live-server-amd64 虚拟机网络连接方式:桥接网卡 固定局域网ip:192.168.10.102 1.2.安装Docker 参考:https://www.runoob.com/docker/ubuntu-docker-install.html 采用手动…

Android Button修改背景颜色及实现Button水波纹效果

Android Button修改背景颜色及实现Button水波纹效果,效果如下: 以下基于API33(Android13.0),向下兼容至API24(Android7.0)。 1.修改Button背景 我们可以发现在布局xml文件中直接修改backgroun…

(Trie Tree)字典树

(Trie Tree)字典树 场景:在n个字符串中查找某个字符串。 暴力匹配,时间复杂度为O(nm),m为字符串平均长度,效率过低。 字典查找单词"fly",首先查找’f’,然后…

LeetCode算法复杂度分析(时间复杂度空间复杂度)

文章目录前言时间复杂度1.概述2.大O记法3.常见类型空间复杂度1.概述2.常见类型典型算法的复杂度分析1.递归算法2.哈希表前言 我们知道,研究算法的最终目的就是如何花更少的时间,如何占用更少的内存去完成相同的需求。 时间复杂度 1.概述 我们要计算算…

分享一篇由C语言实现《数据结构》无头无循环单链表

三月,你好,各位csdn uu们好 文章目录前言一、何为单链表二、单链表基本操作(增,删,查,改,销毁,遍历)1.查找与修改、销毁与遍历2.链表插入与删除操作三、单链表 VS 顺序表…

python如何快速采集美~女视频?无反爬

人生苦短 我用python~ 这次康康能给大家整点好看的不~ 环境使用: Python 3.8 Pycharm mou歌浏览器 mou歌驱动 —> 驱动版本要和浏览器版本最相近 <大版本一样, 小版本最相近> 模块使用: requests >>> pip install requests selenium >>> pip …

暑期实习准备——Verilog手撕代码(持续更新中。。。

暑期实习准备——手撕代码牛客刷题笔记Verilog快速入门VL4 移位运算与乘法VL5 位拆分与运算VL6 多功能数据处理器VL8 使用generate…for语句简化代码VL9 使用子模块实现三输入数的大小比较VL11 4位数值比较器电路VL12 4bit超前进位加法器电路VL13 优先编码器电路①Verilog进阶挑…

Scala-模式匹配

基本语法 模式守卫 匹配类型 匹配对象 Scala 中的模式匹配类似于 Java 中的 switch 语法 基本语法 模式匹配语法中&#xff0c;采用 match 关键字声明&#xff0c;每个分支采用 case 关键字进行声明&#xff0c;当需 要匹配时&#xff0c;会从第一个 case 分支开始&#…

C++学习笔记-内存空间

考虑这样一种情况&#xff0c;当我们使用相同的名称&#xff0c;叫Zara的两个人在同一个班级。我们需要明确区分它们将不得不使用一些额外的信息&#xff0c;如他们的名字&#xff0c;如他们生活在不同的区域或母亲或父亲的名字等等。 同样的情况也出现在C应用程序中。例如&am…

Ubuntu 18.04.6 LTS 服务版安装参考

文章目录安装环境安装过程等待安装进行设置语言选择更新设置键盘样式设置IP地址配置代理配置 Ubuntu 存档镜像自定义存储配置设置账号配置 SSH安装软件包等待安装完成重启后验证安装后的基础优化重置 root 密码放开 root 远程登陆网卡信息变更修改ubuntu-18.04.6-live-server-a…

怎么用白光干涉仪的拼接测量功能

白光干涉仪的基本原理是通过不同的光学元件形成参考光路和探测光路&#xff0c;是利用干涉原理测量光程差&#xff0c;从而确定相关物理量的光学仪器。结合精密Z向扫描模块、3D 建模算法等&#xff0c;可以对器件表面进行非接触式扫描并建立表面3D图像&#xff0c;然后通过一体…

普通指针扫盲

一、什么是指针 C语言里&#xff0c;变量存放在内存中&#xff0c;而内存其实就是一组有序字节组成的数组&#xff0c;每个字节有唯一的内存地址。 CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。这里&#xff0c;数据对象是指存储在内存 中的一个指定数据…

【项目精选】病历管理系统设计与实现(源码+视频)

点击下载源码 企业财务管理系统主要用于电子病历来提高医院各项工作的效率和质量&#xff0c;促进医学科研、教学&#xff1b;减轻各类事务性工作的劳动强度&#xff0c;使他们腾出更多的精力和时间来服务于病人。本系统结构如下&#xff1a; 电子病例系统&#xff1a; 病人登…

通过知识库深度了解用户的心理

自助服务知识库的价值是毋庸置疑的&#xff0c;如果执行得当&#xff0c;可以帮助减少客户服务团队的工作量&#xff0c;仅仅编写内容和发布是不够的&#xff0c;需要知道知识库对客户来说是否有用&#xff0c;需要了解客户获得的反馈&#xff0c;如果你正确的使用知识库软件&a…