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

从几个方面来回答

先,常规的数据库存储引擎,一般都是采用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.mfbz.cn/a/127110.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年电工(中级)证模拟考试题库及电工(中级)理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2023年电工(中级)证模拟考试题库及电工(中级)理论考试试题是由安全生产模拟考试一点通提供,电工(中级)证模拟考试题库是根据电工&…

NOIP2023模拟12联测33 B. 游戏

NOIP2023模拟12联测33 B. 游戏 文章目录 NOIP2023模拟12联测33 B. 游戏题目大意思路code 题目大意 期望题 思路 二分答案 m i d mid mid ,我们只关注学生是否能够使得被抓的人数 ≤ m i d \le mid ≤mid 那我们就只关心 a > m i d a > mid a>mid 的房…

【沁恒 CH32V208 开发板免费试用】+ U盘/ SD NAND读写与多功能数码相框

CH32V208继承了沁恆产品一贯的传统,即U盘的读写功能。这使得尽管CH32V208的闪存要比CH32V307的小一倍,但有了U盘读写功能的支持就可有效地缓解用户对存储空间的需求。它除了支持U盘的读取,还支持对CS SD NAND (贴片式TF卡/SD卡) 这类器件的使…

【微软技术栈】C#.NET 正则表达式源生成器

本文内容 已编译的正则表达式源生成在源生成的文件中何时使用 正则表达式 (regex) 是一个字符串,它使开发人员能够表达要搜索的模式,使其成为搜索文本和提取结果作为已搜索字符串子集的一种很常见的方法。 在 .NET 中,System.Text.RegularE…

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

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

内存卡数据恢复,5 个免费好用的数据恢复方法工具全解

丢失了 SD 卡中的一些重要照片或文档,并且不知道如何恢复?好吧,别担心!!以下是一些适用于 Windows 的最佳 SD 卡恢复工具,可增加您检索意外删除、丢失或丢失数据的机会。 什么是 SD 卡数据恢复软件&#xf…

日志收集的方式和优点

日志是组织 IT 环境中发生的所有事情的记录。它们通常是一系列带有时间戳的消息,可为您提供有关网络中所有活动的第一手信息。 网络中的每个设备和应用程序都会生成日志数据以及用于监控网络流量的 NetFlow 数据,日志是安全信息和事件管理(S…

Lightroom Classic 2021 v10.4

Lightroom Classic 2021是一款一体化照片管理和编辑解决方案。 它面向专业人士和高端用户,支持各种不同相机的原始图像编辑,包括Canon、Apple、Casio、Contax、DxO、Epson等品牌。这样可以将原图像快速导入进行编辑,轻松满足不同用户的需求。…

μC/OS-II---内核:任务调度

目录 内核:调度(oc_core.c文件的函数)OS_TCB(任务控制块)初始化任务控制块列表(ucos_ii.h文件的函数)系统调用,主动让渡CPU发生中断,强制当前任务让渡CPU就绪表(ucos_ii.h文件的函数)设置任务进…

postman中文乱码

在header中添加这两个: Content-Type application/json;charsetUTF-8 Accept application/json;charsetUTF-8

cmd打开idea

当我们用idea打开一个项目的时候,有时候这个项目目录是有的,但是用idea的open却找不到,有时候我要重新关闭窗口,再open好多次才有 于是我现在使用命令打开,先把idea安装路径的bin目录放在path里面 然后cd到项目路径&…

第四季度净利润扭亏为盈,迪士尼的流媒体终于成功了?

对于一直关注迪士尼的投资者来说,眼下最关心的问题只有一个——迪士尼转行流媒体成功了吗? 而对于这一问题答案,或许可以从迪士尼最新发布的财报中找到。11月9日,华特迪士尼公布了截至2023年9月30日的第四季度和全年收益。其中&a…

OpenText Exceed TurboX (ETX) —— 对图形密集型应用程序进行高性能远程访问

OpenText Exceed TurboX (ETX) —— 对图形密集型应用程序进行高性能远程访问 OpenText Exceed TurboX使团队(无论位于何处)能够对图形密集型应用程序进行高性能远程访问,提高生产力并减少 IT 支出,以确保快速投资回报。 亮点: 降低IT支出…

ps 让图片附着在文字上

按住alt在文字与图片图片中间,文字在图片下面)

python默认的输入类型是字符串,怎样转换为其他的类型

在Python中,默认的输入类型是字符串(str类型)。无论你输入的是数字、字符还是其他类型的内容,input函数都会将其作为字符串处理并返回。 如果需要将字符串转换为其他类型(如整数、浮点数等),可…

UDP网络编程

一)熟悉TCP/IP五层协议: 1)封装:就是在数据中添加一些辅助传输的信息; 2)分用:就是解析这些信息 3)发送数据的时候,上层协议要把数据交给下层协议,由下层协议来添加一些信息 4)接收数据的时候,下层协议要把数据交给上层协议&#…

047_第三代软件开发-日志分离

第三代软件开发-日志分离 文章目录 第三代软件开发-日志分离项目介绍日志分离用法 关键字: Qt、 Qml、 log、 日志、 分离 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C 的强…

常见的设计模式

一、是什么 在软件工程中,设计模式是对软件设计中普遍存在的各种问题所提出的解决方案 设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案 设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象&a…

倾斜摄影测量实景三维建模ContextCapture Master

目录 专题一 倾斜摄影测量原理及应用领域 专题二 倾斜摄影测量数据采集方法 专题三 CC支持数据类型及导入数据方法 专题四 CC空三计算参数设置及数据处理方法 专题五 CC控制点与连接点添加及应用 专题六 三维重建及应用 专题七 三维模型修复与场景拼接 更多应用 Contex…

Ceph-deploy跳过gpg-key验证(离线环境安装Ceph)

问题 CentOS-7.6.1810离线环境搭建Ceph环境时出现gpg-key安装源公钥检查错误。原因是执行ceph-deploy install 命令的服务器无法访问互联网。具体报错如下图: 解决 安装命令后新增--no-adjust-repos参数即可跳过安装 GPG 密钥。 命令如下: ceph-deplo…
最新文章