B+树(B树的改进)

news2024/12/23 16:53:03

目录

一、什么是B+树?

二、B+树的性质

1.B+树被广泛作为数据库索引的索引结构

2.m个分支的结点有m个元素

3.每个元素对应子结点最大值

4.多级索引结构

5.叶子结点层包含所有元素

三、B树和B+树的区别

四、B+树的查找

1.顺序查找

2.随机查找

3.范围查找


 

一、什么是B+树?

B+树是一种改进自B树的数据结构,它可以在数据文件中快速地查找数据,也可以通过多级索引结构加速查询速度。

B+树的每个叶子节点都包含关键字和对应的记录指针,而非叶子节点则用于快速定位关键字。

B+树可以进行顺序查找随机查找,同时还可以结合两者进行范围查找。它是一种常用于数据库索引的数据结构。

二、B+树的性质

1.B+树被广泛作为数据库索引的索引结构

2.m个分支的结点有m个元素

3.每个元素对应子结点最大值

4.多级索引结构

只有叶子结点的关键字才存储着指向数据记录的指针,

叶子结点的上一层非叶子结点是对叶子结点的索引,

上次层是对下一层的索引。

5.叶子结点层包含所有元素

三、B树和B+树的区别

B树所有结点的关键字都有直接指向对应记录的指针

B+树叶结点包含全部关键字及指向相应记录的指针,非叶结点只作索引

B树中m个分支有m-1个关键字

B+树中m个分支有m个关键字

B树顺序查找或范围查找只能中序遍历,效率低

B+树兼顾顺序查找和随机查找,还可方便地进行范围查找

四、B+树的查找

1.顺序查找

由于叶子结点层包含所有B+树的所有元素,并且用链表链接在一起,所以直接可以从叶子结点的链表头Head开始顺序查找。

2.随机查找

①先从root指针找到根结点和根节点的元素进行比较,比某元素小走某元素的子树,若大于继续向右进行比较;

②如果找到对应元素时不是叶子结点,该关键字没有存储记录的指针,还要继续上述步骤往下走,直到找到叶子结点。

意思说,B+树的查找最后一定会落到叶子结点

3.范围查找

根据随机查找的方式找到范围在叶子结点层链表的起点,接着在列表中往后顺序查找。

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

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

相关文章

JVM机制

文章目录 JVM 简介JVM内存划分堆(线程共享)Java虚拟机栈(线程私有)本地方法栈(线程私有)程序计数器(线程私有)方法区(线程共享) JVM类加载机制类加载过程双亲…

校园表白墙源码修复版

此校园表白墙源码基于thinkphp,因为时代久远有不少bug,经本人修复已去除大部分bug,添加了美化元素。 https://pan.quark.cn/s/1f9b3564c84b https://pan.baidu.com/s/1bb9vu9VV2jJoo9-GF6W3xw?pwd7293 https://caiyun.139.com/m/i?2hoTc…

群控系统服务端开发模式-应用开发-业务架构逻辑开发准备工作

安装与仓库已经调整完毕,现在开发业务架构逻辑,其次再开发功能逻辑。业务架构逻辑开发与功能逻辑开发不是一回事,一定要明白。业务架构指的是做某一件事或是某一种类型的事的逻辑,在互联网web应用中通常指一套系统的外在逻辑&…

js 的宏任务和微任务

宏任务 (macro-task) 与微任务 (micro-task) 在 JavaScript 中,宏任务(macro-task)和微任务(micro-task)是任务队列(task queue)中两个不同的任务类型,它们是 JavaScript 异步编程机…

DBeaver查看已保存连接的密码

打开Dbeaver窗口菜单-首选项-工作空间,找到工作空间路径 在文件管理器中打开工作空间路径\General.dbeaver,找到credentials-config.json。 在Linux下,使用如下命令对credentials-config.json文件进行解密 openssl aes-128-cbc -d -K babb4…

13 实战:使用Python和Pygame实现视频运动估计播放器

首先看运行效果: 在多媒体处理领域,视频的运动估计是一个重要的课题。在本文中,我们将详细介绍如何使用Python结合Pygame、OpenCV等库,实现一个支持运动估计的视频播放器。本项目旨在展示如何在Python中处理视频帧,实现块匹配算法进行运动估计,并将结果以可视化的方式呈现…

kafka 分布式(不是单机)的情况下,如何保证消息的顺序消费?

大家好,我是锋哥。今天分享关于【kafka 分布式(不是单机)的情况下,如何保证消息的顺序消费?】面试题?希望对大家有帮助; kafka 分布式(不是单机)的情况下,如何保证消息的…

TypeScript基础简介

TypeScript是Javascript的一个超集。 TypeScript在原有的基础之上又添加了编译器类型检查的功能,意味着如果使用ts进行开发,会对变量的类型进行较为严格的验证,防止程序员写出可能出错的代码,规范变成习惯,适合大项目开…

2024年MathorCup妈杯大数据竞赛选题人数发布

经过24个小时,各个平台的相关选题投票、相关文章阅读量等各项数据进行统计,利用之前的评估办法(详见注释)。在开赛后24小时,我们基本确定各个赛题选题人数,以帮助大家更好地分析赛题局势。 题目人数A46B72 …

【Vulnhub靶场】DC-4

DC-4靶场下载地址https://www.five86.com/downloads/DC-4.zip 本机IP:192.168.118.128 靶机IP:192.168.118.0/24 信息收集 扫描主机存活,扫描端口,扫描服务 第一步扫描出主机ip为192.168.118.141 nmap -sP 192.168.118.0/24 nm…

Java后端面试题:Java基础篇

目录 Java基础 1.请你说说Java中基本数据类型的bit长度? 2.switch支持哪些数据类型?支持long么? 3.讲一下常见编码方式? 4.char能不能存储中文? 5.为什么数组索引从0开始呢?假如从1开始不行吗&#xf…

Java篇图书管理系统

目录 前言 一. 图书管理系统的核心 二. 图书管理系统基本框架 2.1 book包 2.1.1 Book(书籍类) 2.1.2 Booklist (书架类) 2.2 user包 2.2.1 User类 2.2.2 Administrator(管理员类) 2.2.3 Visitor(用户类) 2.…

数据结构 - 散列表,初探

今天我们继续学习新的数据结构-散列表。 01定义 我们先来了解一些常见概念名词解释。 散列:散列表的实现叫做散列,是一种实现以常数级时间复杂度执行查找、插入和删除的技术; 散列值:通过散列函数对输入值(key&…

【c++篇】:从基础到实践--c++内存管理技巧与模版编程基础

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:c篇–CSDN博客 文章目录 前言一.c/c内存分布二.c/c的动态内存管理方式2.1.c语言的动态内存管…

JavaEE初阶---多线程(五)---定时器/线程池介绍

文章目录 1.定时器的介绍2.线程池2.1为什么需要使用线程池2.2如何进行线程池的创建2.3普通的构造方法的局限性2.4该种对象创建的方法的特点2.5线程池的模拟实现的逻辑 3.ThreadPoolExecutor类的介绍3.1构造方法3.2四种拒绝的策略 1.定时器的介绍 下面的这个就是我们的这个定时…

基于JSP的高校食堂食材选购管理系统【附源码】

基于JSP的高校食堂食材选购管理系统 效果如下: 系统首页界面 用户登录页面 食材信息页面 论坛交流界面 管理员登录界面 管理员功能主界面 食材信息管理界面 订单配送管理界面 用户功能主界面 商家功能主界面 司机功能主界面 研究背景 近年来互联网技术的发展使得…

【C++篇】手撕string类:从初级到高级入门

1.为什么手撕string类 在面试或者一些学习场景中,手撕 string 类不仅仅是对字符串操作的考察,更多的是考察程序员对 C 内存管理的理解。例如,深拷贝与浅拷贝的实现,如何正确重载赋值运算符,如何避免内存泄漏&#xff…

线上环境的 JAVA 程序占用太多 CPU 资源,定位原因

线上环境的 JAVA 程序占用太多 CPU 资源,定位原因 top 命令执行显示一下结果 我们可以看到有一个 PID 是 4054 的应用程占用了超过一半的 CPU 资源,这是十分糟糕的事情,这个时候我们首先定位一下他是哪个线程在这里搞事情,这个时…

【JavaSE】认识String类,了解,进阶到熟练掌握

#1024程序员节 | 征文# 下面就让博主带领大家一起解决心中关于String类的疑问吧~~~ 1.字符串构造: 第一种和第二种(有一定的区别,在常量池上) public static void main(String[] args) { // 使用常量串构造 String s1 "h…

【机器学习】——numpy教程

文章目录 1.numpy简介2.初始化numpy3.ndarry的使用3.1numpy的属性3.2numpy的形状3.3ndarray的类型 4numpy生成数组的方法4.1生成0和1数组4.2从现有的数组生成4.3生成固定范围的数组4.4生成随机数组 5.数组的索引、切片6.数组的形状修改7.数组的类型修改8.数组的去重9.ndarray的…