页分裂和页合并——Java全栈知识(33)

上篇文章我们讲到了 MySQL 的数据页,我们说到了 InnoDB 的索引是以 B+树的形式构建的,而且 B+树的节点都是一个数据页。
但是 B+树在使用过程中难免会有节点分裂和节点合并的过程。
因为我们是以数据页为基本单位构造的 B+树,那么 B+树的节点分裂和节点合并就会造成数据页的页分裂和页合并。

我们都是知道,B+树是按照索引字段建立的,并且在 B+树中是有序的,假如有下面一个索引的树结构,其中的索引字段的值并不连续。
image.png

1、页分裂

假如,现在我们插入一个新的一条记录,他的索引值是 3,那么他就要按照顺序插入到页 20 中,在索引值为 1,2 的记录的后面。而如果这个索引页已经满了,那么就需要触发一次页分裂。

页分裂是指将该页面中的一部分索引记录移动到一个新的页面中,从而为新记录腾出空间。这样可以保持 B+树的平衡和性能。

以下,就是一次页分裂的过程:
image.png

当我们插入一组无序的数据的时候,那么就可能导致多次的页分裂的情况。
而且某些情况下,可能会从叶子节点一路分裂到根节点(B+树的非叶子节点也存储数据,也可能分裂)。

2、页合并

既然会有页分裂那么就会有页合并。
页分裂发生在 insert 阶段,那么页合并就是发生在 delete 阶段。
当我们删除索引下的数据的时候,叶子节点的数据就会变得比较稀疏,此时 B+树就会触发合并操作。
image.png

3、页分裂和页合并的影响

首先,页分裂和合并是涉及大量数据移动和重组的操作。频繁进行这些操作会增加数据库的/O 负担和 CPU 消耗,影响数据库的整体性能。

第二,分裂和合并可能导致 B+树索引结构频繁调整,这个过程也会影响插入及删除操作的性能。

第三,频繁的页分裂和合并可能会导致磁盘上存在较多的空间碎片,新分出的一个页一般会有很多空闲空间,使得数据库表占用更多的磁盘空间,而导致浪费。

因为一个数据页是 16KB,如果此时的叶子节点存储两条数据也是需要 16KB,剩余的位置填充对齐。存储五条数据的时候也是 16KB。所以空间碎片会导致磁盘空间的浪费。

4、避免页分裂

1、我们在设置主键的时候尽量选择能够自增的字段
2、不要使用 varchar 类型作为 ID 主键。
3、我们在生成全局唯一 ID 的时候尽量不要使用 UUID,UUID 不是自增的。

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

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

相关文章

真正的IDEA在线版有多好用

前言 在上一篇文章使用过TitanIDE的VS Code在线版以后,尝到了不少甜头,紧接着又去使用了他的在线版IntelliJ IDEA,同样非常惊艳,不需要任何时间去适应这款云原生开发工具,事不宜迟,马上开整 这才是真正的VS Code在线版…

Qt | windows Qt6.5.3安卓环境搭建成功版(保姆级教程)

01、第一章 Qt6.5.3安装 资源 Qt 国内下载地址清华大学开源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/qt/archive/online_installers/Qt 阿里云盘下载Qt 安卓开发https://www.alipan.com/s/kNaues6CHaG点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极…

锂电池的串并联特性

1节锂电池电芯的规格是10000mah,4v(总能量10000*4) 那么3节电芯串联电池的规格是10000mah,12v(总能量10000*12)注意,这里电池的规格不是30000mah 3节电芯并联的规格是30000mah,4v …

【Linux进阶】windows和linux文件互传的两种方式

前言 我们在windows电脑上使用ssh工具(比如Xshell)来远程登录并使用linux云服务器的时候,难免要将我们的文件传输到linux服务器上,或者将linux服务器的文件传输到我们的windows电脑里,那么,我们要怎么来实…

Springboot Mybatis 多数据源配置以及使用

在Spring Boot中配置MyBatis的多数据源是一个常见需求,尤其是在需要连接多个数据库时,下面是详细的步骤指南。 引入依赖 首先,在你的pom.xml文件中添加Spring Boot、MyBatis和数据库连接的相关依赖。例如,如果你使用的是MySQL数…

Java集合实例

一、什么是Java集合实例: 指的是在 Java 程序中创建和使用的集合对象,这些对象用于存储和操作数据。Java 集合框架提供了一系列的接口和实现类,用于管理不同类型的数据集合。 二、Java集合的主要实例类型: 1. List(列…

激光与相机融合标定汇总:提升融合算法的精度与可靠性(附github地址)

前言 随着科技的飞速发展,激光技术与相机技术的融合已成为推动智能化影像发展的重要力量。这种融合不仅提高了成像的精度和效率,还为相关行业带来了革命性的变革。在这篇博客中,我们将深入探讨激光与相机融合标定的原理及其在各个领域的应用…

蒙特卡洛法求定积分方

对于连续函数密度函数,求某一个区间的概率时,理论上通过积分获取, 以求曲线围成的面积为例 当我们在[a,b]之间随机取一点x时,它对应的函数值就是f(x)。接下来我们就可以用f(x)*(b-a)来粗略估计曲线下方的面积,也就是我…

Logback-打印方法名及代码行号

背景 公司产品使用了logback作为日志输出框架,日志输出的pattern里配置了打印调用方法名及代码行号的配置,但是实际输出的日志方法名总是显示? 在强迫症的驱使下,开启了探秘之旅 Logback版本 1.2.3 项目中Logging.pattern配置如下&#xff1…

Flutter循序渐进==>与基金mysql数据库交互

导言 债基基金的注意事项,别看收益不高,注意事项可真不少。最近买了CS一支基金,三周时间就亏掉两三个点(水平全网最差、赎回费和管理费全网最高)。就是冲着它的历史成绩去的,突然发现已经换了基金经理&…

【PHP项目实战训练】——后台-RBAC权限管理原理

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

awk的用法

目录 awk简述 awk的用法 选项 内置变量 命令格式 打印行号 打印指定行 打印奇偶行 按行取列 BEGIN打印模式 乘法计算 awk -v 变量赋值 awk的条件判断 面试题awk的三元表达式 awk的精确筛选 逻辑且、或关系 awk做小数运算 curl 练习 1.获取其中的所有子域名…

vivo 互联网自研代码评审 VCR 落地实践

作者:vivo 互联网效能平台团队- Chi Wei 本文介绍了vivo工程效能团队基于 Gitlab、Gerrit等开源工具搭建的VCR平台,代码评审idea插件开发及开发过程中遇到的挑战、困难,并分享了相应的应对策略和优化方案。 代码评审是软件质量保证一种活动&…

墨刀原型--多tab切换显示对应页面场景交互步骤

一般我们画原型页面,PC端或者APP端或小程序端,都会有页面会切换多个tab或状态,同时对应页面显示对应的页面数据。 设计思路如下: 以订单列表页面为例: 可以将订单列表页面分为3部分,固定的头部、状态栏、…

java和网络安全,哪个就业前景更大?

常年以来,Java一直占据着程序语言的前三名,因此也就成了许多进入IT行业的首选语言。但随着5G时代的兴起,网络安全也成了当今最火热的“风口行业”。导致很多年轻人不知如何选择,一直处于纠结徘徊的状态。下面盾叔就带大家了解一下…

Qt—贪吃蛇项目(由0到1实现贪吃蛇项目)

用Qt实现一个贪吃蛇项目 一、项目介绍二、游戏大厅界面实现2.1完成游戏大厅的背景图。2.2创建一个按钮,给它设置样式,并且可以跳转到别的页面 三、难度选择界面实现四、 游戏界面实现五、在文件中写入历史战绩5.1 从文件里提取分数5.2 把贪吃蛇的长度存入…

关于vue创建项目失败报错(镜像过期)的解决方案

在新建vue项目时出现以下错误: 原因: npm.taobao.org和registry.npm.taobao.org旧域名于2021年官方公告域名更换事件,已于2022年05月31日零时起停止服务,域名HTTPS证书于2024年1月22日正式到期,不可再用。 解决方案:…

【vue3】【vant】 移动端古诗词句子发布收藏项目

更多项目点击👆👆👆完整项目成品专栏 【vue3】【vant】 移动端古诗词句子发布收藏项目 获取源码方式项目说明:其中功能包括素材包含:项目运行环境运行截图 获取源码方式 加Q群:632562109项目说明&#xf…

突破Web3红海,DePIN如何构建创新生态系统?

撰文:TinTinLand 本文来源香港Web3媒体Techub News专栏作者TinTinLand 2023 年 DePIN 赛道的火热成为 Web3 行业的重点关注方向,当前如何以可扩展、去中心化、安全方式推动 DePIN 赛道赋能下的 AI 版图建设,寻找更多 Web3 行业创新机遇成为…

JS(JavaScript)事件处理(事件绑定)趣味案例

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…