大厂面试题-MySQL为什么使用B+Tree作为索引结构

news2024/11/29 14:52:59

从几个方面来回答

先,常规的数据库存储引擎,一般都是采用B树或者B+树来实现索引的存储。

(如图)因为B树是一种多路平衡树,用这种存储结构来存储大量数据,它的整个高度比二叉树来说,会矮很多。

而对于数据库来说,所有的数据必然都是存储在磁盘上的,而磁盘IO的效率实际上是很低的,特别是在随机磁盘IO的情况下效率更低。

所以树的高度够决定磁盘IO的次数,磁盘IO次数越少,对于性能的提升就越大,这也是为什么采用B树作为索引存储结构的原因。

(如图)是在MySQL的InnoDB存储引擎里面,它用了一种增强的B树结构,也就B+树来作为索引和数据的存储结构。

比较于B树结构,B+树做了几个方面的优化:

1.   B+树的所有数据都存储在叶子节点,非叶子节点只存储索引。

2.   叶子节点中的数据使用双向链表的方式进行关联。

使用B+树来实现索引的原因,有几个方面

3.   B+树非叶子节点不存储数据,所以每一层能够存储的索引数量会增加,意味着B+树在层高相同的情况下存储的数量要比B树要多,使得磁盘IO次数更少。

4.   在MySQL里面,范围查询是一个比较常用的操作,而B+树的所有存储在叶子节点的数据使用了双向链表来关联,所以在查询的时候只需查两个节点进行遍历就行B树需要获取所有节点,所以B+树在范围查询上效率更高。

5.   在数据检索方面,由于所有的数据都存储在叶子节点,所以B+树的IO次数会更加定一些。

6.   因为叶子节存储所有数据,所以B+树的全局扫描能力更强一些,因为它只需要扫描叶子节点。但是B树需要遍历整个树。

另外,基于B+树这样一种结构,如果采用自增的整型数据作为主键,还能更好的避免增加数据的候,带来叶子节点分裂导致的大量运算的问题。

总的来说,我认为技术方案的选型,更多的是去解决当前场景下的特定问题,并不一定是说B+树就是最好的选择,就像MongoDB里面采用B树结构,本质上来说,其实是关系型数据库和非关系型数据库的差异。

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

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

相关文章

【论文阅读】NeROIC:在线图像集合中对象的神经渲染

论文连接: NeROIC: Neural Rendering of Objects from Online Image Collections introduction 从在线图像集合中获取对象表示的新颖方法,从具有不同相机、照明和背景的照片中捕获任意对象的高质量几何形状和材料属性。这使得各种以对象为中心的渲染应…

AI:78-基于深度学习的食物识别与营养分析

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新中,…

ssm+vue的疫情防控管理系统设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的疫情防控管理系统设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网…

【AI】生成模型变得简单:了解它们的工作原理和不同类型

什么是生成模型? 在不断发展的人工智能领域,生成模型已成为人工智能技术最具吸引力和创造力的方面之一。这些模型是创意人工智能的核心,它们有能力生成各种内容,从栩栩如生的图像和引人入胜的文本到令人着迷的音乐和创新的艺术作…

webpack babel

构建工具 简介 当我们习惯了在node中编写代码的方式后,在回到前端编写html、css、js这些东西会感觉到各种的不便。比如:不能放心的使用模块化规范(浏览器兼容性问题)、即使可以使用模块化规范也会面临模块过多时的加载问题。我们…

MySQL字符串需要注意的事项

char(N),N在0-255间 varchar(N),N在0-65536间 需要注意N是字符,不是字节,英文字母一个字符一个字节,阿拉伯字母一个字符两个字节,中文日文一个字符三个字节,emoji是一个字符四个字节 当今移动端…

跨境电商:自养买家账号测评,你需要了解的细节

在跨境电商的浪潮中,自养买家账号测评已经成为了一种趋势。近期,不少跨境卖家咨询自养买家账号测评的相关问题,看来有必要再讲解一下卖家测评的一些细节。今天将着重介绍自养号测评的相关内容。 首先,什么叫做自养号测评呢&#x…

创建云端服务器

1.申请云端服务器 每个账户有三个月的免费试用 我的服务器选择是centos7 ,别选成win了。 2.创建实例 创建实例的步骤,阿里云有文档 介绍 大致就是 左边点实例 -》 顶部选你申请服务器时的地区-》下面就出现一条实例-》点更多 -》要重置实例密码 -》同一…

海康工业相机如何提高相机帧率

影响帧率的因素 相机参数 帧率限制使能 像素格式 曝光时间 数据包大小(网口) 相机默认参数 ADC位深 系统环境设置

React进阶之路(四)-- React-router-v6、Mobx

文章目录 ReactRouter前置基本使用核心内置组件说明编程式导航路由传参嵌套路由默认二级路由404路由配置集中式路由配置 Mobx什么是Mobx环境配置基础使用计算属性(衍生状态)异步数据处理模块化多组件数据共享 ReactRouter 前置 在一开始前端开发都是单…

HBuilderX 运行Android App项目至雷电模拟器

一、下载安装HBuilderX HBuildeX官网 安装最新的正式版,或者点击历史版本查看更多版本;【ps:Alpha版本为开发版,功能更多,但是也不稳定,属于测试版本】 直接将压缩包解压,运行HBuildeX即可。 二…

凯美瑞 vs 太空船:Web3 游戏生长的两条路径

撰文:Teng Yan(0xPrismatic),Delphi Digital 研究员 编译:TinTinLand 来源:https://0xprismatic.substack.com/p/my-short-web3-gaming-thesis 经常有人问我关于 Web3 游戏的看法,所以我想以这…

文本生成高精准3D模型,北京智源AI研究院等出品—3D-GPT

北京智源AI研究院、牛津大学、澳大利亚国立大学联合发布了一项研究—3D-GPT,通过文本问答方式就能创建高精准3D模型。 据悉,3D-GPT使用了大语言模型的多任务推理能力,通过任务调度代理、概念化代理和建模代理三大模块,简化了3D建模的开发流程…

vmware16.2内部win7联网

1、主机配置 前置条件:DHCP和NAT服务已启动 设置无线IP与虚拟机IP为自动获取 二者都是:右键-属性 选择IPv4 自动获取 2、虚拟机配置 设置虚拟机上网方式为NAT 菜单栏-虚拟机-设置 NMnet8改为NAT模式 菜单栏-编辑-虚拟网络编辑器 win7系统内部网…

Facebook广告被暂停是什么原因?广告账号被封怎么办?

许多做海外广告投放的小伙伴经常遇到一个难题,那就是投放的Facebook广告被拒或广告帐户被关闭赞停的经历,随之而来的更可能是广告账户被封,导致资金的损失。本文将从我自身经验,为大家分享,FB广告被暂停的原因有哪些&a…

Java多线程interrupt、interrupted、isInterrupted详解

一、概念 1.1 interrupt方法应用场景 用来打断正在阻塞的线程:sleep/wait/join打断正常的线程 1.2 interrupt() 方法 Thread类的实例方法,其作用是中断此线程(此线程不一定是当前线程,而是指调用该方法的Thread实例所代表的线程…

【手写模拟Spring底层原理】

文章目录 模拟Spring底层详解1、结合配置类,扫描类资源1.1、创建需要扫描的配置类AppConfig,如下:1.2、创建Spring容器对象LyfApplicationContext,如下1.3、Spring容器对象LyfApplicationContext扫描资源 2、结合上一步的扫描&…

oracle11G在linux环境下的卸载操作

1.使用SQL*PLUS停止数据库 [oracleOracleTest oracle]$ sqlplus / as sysdba SQL> shutdown [immediate] SQL> exit2.停止Listener [oracleOracleTest oracle]$ lsnrctl stop3.停止HTTP服务 [rootOracleTest /root]# service httpd stop4.用su或者重新登录到root(如想…

bootstrap-fileinput拦截文件上传处理失败,根据后台返回数据处理

bootstrap-fileinput如何拦截后台数据,自定义处理业务逻辑 需要后台返回error字段,失败示例,注意:error必须有内容,不然默认也是成功, bootstrap-fileinput失败验证只需要 error 字段,其他附加…

【MySQL习题】各个视频的平均完播率【全网最详细教学】

目录 数据表描述 问题描述 输出示例 解题思路【重点】 正解代码 数据表描述 有以下两张表: 表1:用户-视频互动表tb_user_video_log 数据举例: 说明: uid-用户ID,video_id-视频ID start_time-开始观看时间end_time-结束观…