【MySQL】查询原理 —— B+树查询数据全过程

news/2024/10/4 4:59:17/

使用B+树作为索引结构的原因:


一种自平衡树:

B+树在插入和删除的时候节点会进行分裂和合并操作,以保持树的平衡,存在冗余节点,使得删除的时候树结构变化小,更高效。

高度不会增长过快,查询磁盘I/O次数减少:

B+树是一种多叉树,非叶子节点只保存主键或索引值和页面指针,使得每一页能够容纳更多记录,内存中存放更多索引,容易命中缓存,查询I/O次数减少。

范围查询能力强:

叶子节点通过链表连接定位到叶子节点的起点后,只需要顺序扫描链表后续的数据,非常高效。

根节点开始,根据键值大小确定位置于左/右子树

非叶子节存储主键和页号,通过页号定位到叶子节点(默认16k大小),可存储多条数据。

通过页目录索引快速找到记录,页目录每个槽指向对应分组的最大记录。

通过二分查询,利用槽定位数据所在组。

InnoDB规定:

第一个分组只有一条记录

中间的分组4-8条记录

最后一个分组1-8条记录

B+树和B树的区别:

B+树更加稳定,平均,都要从根结点查询到叶子节点。

B+树便于区间查找,B树只能每一层遍历查找。

B树每个节点都存储数据,B+树存储key和指针,内存中可存放更多索引页,减少磁盘查询次数。


http://www.ppmy.cn/news/1534249.html

相关文章

Python 面向对象编程基础

面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将数据和操作数据的方法(函数)组合在一起,形成一个“对象”。Python 是一种支持面向对象编程的语言,本文将介绍 Py…

Stable Diffusion绘画 | 来训练属于自己的模型:LoRA模型验收

我们每次训练出来的模型,一般都会生成 20-30 个,至于哪个模型符合要求,较为理想呢? 接下来需要对每个 LoRA模型 进行逐一对比测试。 为了测试模型的泛化性,可选择使用一些较为特殊的提示词,看看各个模型对…

Oracle架构之物理存储中各种文件详解

文章目录 1 物理存储1.1 简介1.2 数据文件(data files)1.2.1 定义1.2.2 分类1.2.2.1 系统数据文件1.2.2.2 撤销数据文件1.2.2.3 用户数据文件1.2.2.4 临时数据文件 1.3 控制文件(Control files)1.3.1 定义1.3.2 查看控制文件1.3.3…

华为Nova9开启开发人员选项

默认状态下,华为Nova9的开发人员选项是隐藏的,如下图: 要开启开发人员选项,在“设置→关于手机”中找到“HarmonyOS版本”或者“软件版本”,在版本号上连续点击,每次点击“HarmonyOS版本”和“软件版本”会…

Kubernetes Ingress:简化外部访问的利器

在 Kubernetes 集群中,Ingress 是一个强大的资源对象,它可以为集群内的服务提供外部访问能力。本文将深入探讨 Kubernetes Ingress 的概念、工作原理、配置方法以及最佳实践。 什么是 Ingress? Ingress 是 Kubernetes 中的一个 API 对象,它管理集群外部访问集群内服务的规…

Bilibili视频如何保存到本地

Bilibili(哔哩哔哩)作为中国领先的视频分享平台之一,汇聚了大量的优质内容,从搞笑动画、综艺节目到专业教程,应有尽有。许多用户时常会遇到这样的需求:希望将视频保存到本地,方便离线观看或者保存珍藏。由于版权保护等…

centos7编译安装openresty+lua-resty-http+lua-resty-openssl-master

OpenResty 是一个基于 Nginx 的高性能 Web 平台,它将 Nginx 服务器与 Lua 脚本语言紧密集成在一起,从而使得用户可以使用 Lua 编写各种 Web 应用和服务。OpenResty 提供了一系列的模块和工具,使得开发人员可以轻松地构建动态 Web 应用程序、R…

动手学深度学习(李沐)PyTorch 第 7 章 现代卷积神经网络

7.1 深度卷积神经网络(AlexNet) 在计算机视觉中,直接将神经网络与其他机器学习方法进行比较也许不公平。这是因为,卷积神经网络的输入是由原始像素值或是经过简单预处理(例如居中、缩放)的像素值组成的。但…