【吊打面试官系列】为什么Mysql的索引结果用B+树

embedded/2024/10/18 19:22:23/

Mysql如何使用索引查询数据的


下图是一个B+树我们的目标节点是 13

我们先根据  13 锁定非叶子节点 2,计算机进行一次IO操作把叶子节点取出来,在叶子节点2中找到叶子节点5 里面有 13 计算机也要进行一次IO将数据取到内存里然后读数据 一共进行了

3次磁盘IO

众所周知:影响性能最大的就是 磁盘的IO,磁盘IO的顺序是最慢的

B+树的优势

1. B+树对磁盘I/O友好

B+树是一种平衡树,其设计目的之一就是为了减少磁盘I/O操作。因为数据库的数据存储在磁盘上,而磁盘的读写速度远远低于内存,优化磁盘I/O非常关键。B+树的每个节点可以包含多个数据项(或索引值),并且B+树是一个高度平衡的结构,树的高度较低,因此查询、插入、删除操作需要的磁盘读取次数较少。

高度低代表查询一个节点的次数更少IO次数更少,查询速度更快

2. B+树叶子节点链表结构支持范围查询

在B+树中,所有数据都存储在叶子节点,叶子节点通过链表连接,保证了数据的顺序性。这使得范围查询非常高效,可以通过遍历叶子节点快速获取指定范围内的所有数据。而B树中,数据存储在每个节点中,链表的存在让B+树比B树更适合顺序访问和范围查询。

3. 高效的查询性能

B+树的查询复杂度为O(logN),其中N是节点的数量。由于B+树的层数较少,每次查询从根节点到叶子节点只需要进行少量的磁盘读取操作,能快速定位目标数据。相较于其他结构(如哈希表),B+树不仅支持单点查询,还支持范围查询,性能较为稳定。

4. 支持高并发的插入和删除

B+树的结构使得其插入和删除操作的效率较高。当有新的数据插入或删除时,B+树会保持自平衡,即在发生操作时树的高度不会大幅增加,这保证了数据库在面对大量插入、更新和删除时仍然能够保持较高的查询性能。

5. 适合数据库的分页存储模型

MySQL的InnoDB存储引擎设计是基于页的存储,每一页通常为16KB,B+树的每一个节点正好可以映射到一个页。这种结构能最大化利用每个磁盘页,减少不必要的磁盘I/O次数。

因此,B+树在MySQL InnoDB引擎中作为索引结构,主要是因为它能够平衡磁盘访问、查询、插入、删除等操作的效率,且特别适合范围查询和顺序访问的场景。


http://www.ppmy.cn/embedded/100311.html

相关文章

iPhone变身万能钥匙,iOS 18.1让你的手机解锁一切

Apple 近日发布新闻稿宣布,在即将推出的 iOS 18.1 更新中,将开放全新的 NFC(近场通信)和 SE(安全元件)API 给第三方开发者使用。这一举措将使得开发者能够开发出更加多样化和实用的应用程序,如车…

前端 uniapp 多端条件编译

条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台。 使用方法 以 #ifdef 或 #ifndef 加 %PLATFORM% 开头,以 #ifndef 结尾。 #ifdef:if defined 仅在某平台存在#ifndef:…

Android Studio 文件存储读写

文件的相关操作方法 文件协助类:FileHelper.java public class FileHelper {private Context mContext;public FileHelper() {}public FileHelper(Context mContext) {super();this.mContext mContext;}/** 这里定义的是一个文件保存的方法,写入到文件…

Paimon Flink本地读取数据报错

1.idea本地读取paimon 用idea在本地读取paimon的表时需要添加的依赖除了官网提出的和hadoop相关的,paimon-flink之类相关的除外还需要其他额外依赖 import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.tabl…

Eureka与Consul对比:微服务注册与发现的不同方案分析

Eureka与Consul对比:微服务注册与发现的不同方案分析 引言 随着微服务架构的广泛应用,服务注册与发现成为了构建高效、灵活的分布式系统的重要组成部分。在一个典型的微服务架构中,每个服务都是独立的应用程序,通常在不同的主机…

开源大模型LLaMA架构介绍

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 swift与Internvl下的多模态大模型分布式微调指南(附代码和数据&#xff…

算法题(3)------两两交换链表中的节点

leetcode链接:24. 两两交换链表中的节点 - 力扣(LeetCode) struct ListNode * swapPairs(struct ListNode * head) {typedef struct ListNode ListNode;ListNode *fakehead (ListNode *)malloc(sizeof(ListNode));fakehead->next head;…

wpf datagrid 实现双向绑定

前台 <DataGridAutoGenerateColumns"False"Background"White"CanUserAddRows"True"Grid.Row"1"RowEditEnding"DataGrid_OnRowEditEnding"RowHeight"60"SelectionUnit"CellOrRowHeader"x:Name"…