InnoDB的页分裂与页合并

news2024/9/24 3:21:57

数据组织方式

InnoDB 存储引擎中,表数据都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表

行数据,都是存储在聚集索引的叶子节点上的。

 

InnoDB 引擎中,数据行是记录在逻辑结构 page 页中的,而每一个页的大小是固定的,默认 16K 。那也就意味着, 一个页中所存储的行也是有限的,如果插入的数据行row 在该页存储不小,将会存储到下一个页中,页与页之间会通过指针连接。

页分裂

页可以为空,也可以填充一半,也可以填充 100% 。每个页包含了 2-N 行数据 ( 如果一行数据过大,会行溢出) ,根据主键排列。

主键顺序插入

从磁盘中申请页, 主键顺序插入

第一个页没有满,继续往第一页插入

当第一个也写满之后,再写入第二个页,页与页之间会通过指针连接

 当第二页写满了,再往第三页写入

主键乱序插入

加入1#,2#页都已经写满了,存放了如图所示的数据,

 此时再插入id50的记录,因为索引结构的叶子节点是有顺序的。按照顺序,应该存储在47之后,但是47所在的1#页,已经写满了,存储不了50对应的数据了。 那么此时会开辟一个新的页 3#

但是并不会直接将50存入3#页,而是会将1#页后一半的数据,移动到3#页,然后在3#页,插入50 

移动数据,并插入 id 50 的数据之后,那么此时,这三个页之间的数据顺序是有问题的。 1# 的下一个页,应该是3# 3# 的下一个页是 2# 。 所以,此时,需要重新设置链表指针。

 

 上述的这种现象,称之为 "页分裂",是比较耗费性能的操作。

页合并

目前表中已有数据的索引结构(叶子节点)如下 

当删除一行记录时,实际上记录并没有被物理删除,只是记录被标记( flaged )为删除并且它的空间变得允许被其他记录声明使用

 

当我们继续删除2#的数据记录,当页中删除的记录达到 MERGE_THRESHOLD(默认为页的50%),InnoDB会开始寻找最靠近的页(前或后)看看是否可以将两个页合并以优化空间使用。

 

删除数据,并将页合并之后,再次插入新的数据21,则直接插入3#

 这个里面所发生的合并页的这个现象,就称之为 "页合并"

知识小贴士:MERGE_THRESHOLD:合并页的阈值,可以自己设置,在创建表或者创建索引时指定。

由上面可得索引设计原则

  • 满足业务需求的情况下,尽量降低主键的长度。
  • 插入数据时,尽量选择顺序插入,选择使用AUTO_INCREMENT自增主键。尽量不要使用UUID做主键或者是其他自然主键,如身份证号。
  • 业务操作时,避免对主键的修改。

 

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

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

相关文章

每日一博 - 闲聊 API GateWay

文章目录 概念图解小结 概念 API Gateway(API 网关)是一个在现代应用程序和服务架构中起关键作用的组件,它具有多种功能和作用,主要包括以下方面: 路由和请求分发:API 网关充当前端入口,根据请…

css中BFC外边距塌陷解决办法

什么是BFC 块级格式化上下文&#xff0c;独立的渲染区域&#xff0c;与外部毫不相干&#xff0c;上下两个元素都设置了外边距&#xff0c;结果会出现重叠的部分合并 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /&…

2020-2023中国高等级自动驾驶产业发展趋势研究-中国高等级自动驾驶发展近况

1.2 中国高等级自动驾驶发展近况 通过对中国高等级自动驾驶行业的观察和分析&#xff0c;亿欧汽车认为&#xff0c;除技术解决方案提供商外&#xff0c;如今的车企、政府、资本同样在产业链中扮演重要角色。此外&#xff0c;车路协同技术的发展也为高等级自动驾驶的发展提供了更…

解密(2023寒假每日一题 20)

给定一个正整数 k k k &#xff0c;有 k k k 次询问&#xff0c;每次给定三个正整数 n i , e i , d i n_i,e_i,d_i ni​,ei​,di​ &#xff0c;求两个正整数 p i , q i p_i,q_i pi​,qi​ &#xff0c;使 n i p i q i &#xff0c; e i d i ( p i − 1 ) ( q i − 1 …

肖sir__mysql之三表__008

mysql之三表 create table student( stu_no int, stu_name varchar(10), sex char(1), age int(3), edit varchar(20) ) DEFAULT charsetutf8; insert into student values (1,‘wang’,‘男’,21,‘hello’), (2,‘小明’,‘女’,22,‘haha2’), (3,‘hu’,‘女’,23,‘haha3…

数据结构基础8:二叉树oj+层序遍历。

二叉树oj层序遍历 题目一&#xff1a;二叉树的销毁&#xff1a;方法一&#xff1a;前序遍历&#xff1a;方法二&#xff1a;后序遍历&#xff1a; 题目二&#xff1a;二叉树查找值为x的节点方法一&#xff1a;方法二&#xff1a;方法三&#xff1a; 题目三&#xff1a;层序遍历…

全球与中国双壳鼻夹板市场:增长趋势、竞争格局与前景展望

双壳鼻夹板是一种医疗器械&#xff0c;用于鼻部手术后的支撑和稳定&#xff0c;以及减轻手术区域的肿胀和出血。它是由柔软的材料制成&#xff0c;通常是塑料或硅胶。双壳鼻夹板的设计呈现类似于两个壳体或半壳体&#xff0c;可以覆盖整个鼻部或其一侧。它的形状和大小可以根据…

网络基础-应用层协议-HTTP/HTTPS

HTTP/HTTPS HTTP基本概念协议格式请求报文请求方法请求资源地址协议版本 应答报文 常见Header常见状态码与状态描述Cookie&Sessionhttp协议特点 HTTPS基本概念对称加密与非对称加密数据摘要&数据指纹HTTPS工作过程探究只采用对称加密只采用非对称加密双方都采用非对称加…

酷开系统音乐频道,用音乐治愈你!

音乐作为娱乐生活中的一部分&#xff0c;它可以起到调节心情让身体放松的作用&#xff0c;同时还可以舒缓压力&#xff0c;给大脑一个休息的时间。有句话说得好&#xff1a;“耳机是人类的避难所&#xff0c;音乐是心脏的救命丸”。音乐是一种疗愈身心的存在&#xff0c;耳机线…

strncpy

strncpy&#xff1a; 函数介绍&#xff1a; 函数原型&#xff1a; char *strncpy(char *dest, const char *src, int n) 返回值&#xff1a;dest字符串起始地址 说明&#xff1a; 1、当src字符串长度小于n时&#xff0c;则拷贝完字符串后&#xff0c;剩余部分将用空字节填…

【PHP图片托管】CFimagehost搭建私人图床 - 无需数据库支持

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

Bigemap在土地规划行业是怎么应用的?

选择Bigemap的原因&#xff1a; 获取途径&#xff1a;国土部门内部使用的是arcgis专用的系统&#xff0c;也安装不来arcgis软件&#xff0c;所以在网上找的我们软件软件上有影像地图&#xff0c;可以看高程海拔,有测量画图工具&#xff0c;可以导入和导出SHP和CAD文件&#xf…

远程ssh连接manjaro无法使用系统剪切板

文章目录 背景本机环境 vim的复制粘贴查看vim寄存器各种寄存器的含义 使用系统剪切板ssh访问系统剪切板安装配置X11再次查看vim寄存器 后记 背景 使用vim打开文件&#xff0c;把a文件中的内容&#xff0c;复制一部分到b文件中去。 大概步骤如下&#xff1a; 1、搜索要复制的…

SD系列——图像高清化算法方法

图像高清化算法方法 文章目录 图像高清化算法方法一、通过 Extras 选项卡执行放大算法二、通过 SD upscale 脚本增强细节三、txt2img 页面下的 Hires Fix四、扩展插件 Ultimate SD upscale ControlNet Tile参数调整单用 Ultimate SD Upscale小结 五、Tiled Diffusion & VA…

怎么把两首歌曲拼接在一起?

怎么把两首歌曲拼接在一起&#xff1f;音乐的美妙旋律能够陶冶人们的心灵&#xff0c;在日常生活和工作中&#xff0c;许多用户会使用各种歌曲来进行剪辑和制作。尤其在媒体行业工作的用户&#xff0c;每天都需要使用大量不同歌曲的片段&#xff0c;进行拼接和剪辑来进行视频制…

深入理解Linux网络笔记(一):内核是如何接收网络包的

本文为《深入理解Linux网络》学习笔记&#xff0c;使用的Linux源码版本是3.10&#xff0c;网卡驱动是Intel的igb网卡驱动 Linux源码在线阅读&#xff1a;https://elixir.bootlin.com/linux/v3.10/source 1、内核是如何接收网络包的 1&#xff09;、Linux网络收包总览 在TCP/I…

数字IC验证23915--寄存器方法

文章目录 镜像值与期望值predication的分类自动预测显示预测 uvm_reg的访问方法寄存器健康检查![在这里插入图片描述](https://img-blog.csdnimg.cn/8b1832ab43854068970bb5a66d851d06.png) 镜像值与期望值 寄存器模型中的每一个寄存器&#xff0c;都应该有两个值&#xff0c;…

【计算机基础】Git系列2:配置多个SSH

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

Python 07面向对象的三大特点【封装、继承、多态】

&#x1f600;前言 在软件开发的过程中&#xff0c;面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称 OOP&#xff09;已经成为了一种不可或缺的编程范式。它允许开发人员创建属于自己的对象&#xff0c;具有其特征和行为&#xff0c;通过将数据和方法绑定…

Python中进行特征重要性分析的9个常用方法

特征重要性分析用于了解每个特征(变量或输入)对于做出预测的有用性或价值。目标是确定对模型输出影响最大的最重要的特征&#xff0c;它是机器学习中经常使用的一种方法。 为什么特征重要性分析很重要? 如果有一个包含数十个甚至数百个特征的数据集&#xff0c;每个特征都可能…