什么是页分裂、页合并?

数据组织方式

在InnoDB存储引擎中,表数据都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table IOT)
在这里插入图片描述

行数据,都是存储在聚集索引的叶子节点上的。而我们之前也讲解过InnoDB的逻辑结构图:
在这里插入图片描述

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


页分裂

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

A. 主键顺序插入效果

  1. 从磁盘中申请页, 主键顺序插入:
    在这里插入图片描述

  2. 第一个页没有满,继续往第一页插入:
    在这里插入图片描述

  3. 当第一个也写满之后,再写入第二个页,页与页之间会通过指针连接:
    在这里插入图片描述

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

在这里插入图片描述


B. 主键乱序插入效果

  1. 假如1#,2#页都已经写满了,存放了如图所示的数据:
    在这里插入图片描述

此时再插入id为50的记录,我们来看看会发生什么现象:
会再次开启一个页,写入新的页中吗?
在这里插入图片描述

不会。因为索引结构的叶子节点是有顺序的。按照顺序,应该存储在47之后。
在这里插入图片描述

但是47所在的1#页,已经写满了,存储不了50对应的数据了。 那么此时会开辟一个新的页 3#。
在这里插入图片描述

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

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

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


页合并

目前表中已有数据的索引结构(叶子节点)如下:
在这里插入图片描述
当我们对已有数据进行删除时,具体的效果如下:

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

当我们继续删除2#的数据记录:
在这里插入图片描述

当页中删除的记录达到 MERGE_THRESHOLD1(默认为页的50%),InnoDB会开始寻找最靠近的页(前或后)看看是否可以将两个页合并以优化空间使用。
在这里插入图片描述

删除数据2,并将页合并之后,再次插入新的数据20,则直接插入3#页。
在这里插入图片描述

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


  1. MERGE_THRESHOLD:合并页的阈值,可以自己设置,在创建表或者创建索引时指定。 ↩︎

  2. 此时数据才被物理删除。 ↩︎

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

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

相关文章

61、内蒙古工业大学、内蒙科学技术研究院:CBAM-CNN用于SSVEP - BCI的分类方法[脑机二区还是好发的]

前言: 之前写过一篇对CBAM模型改进的博客,在CBAM中引入了ECANet结构,对CBAM中的CAM、SAM模块逐一改进,并提出ECA-CBAM单链双链结构,我的这个小的想法已经被一些同学实现了,并进行了有效的验证,…

快速对比 找出2个名单不同之处

import pandas as pd# 读取两个Excel文件 df1 pd.read_excel(1.xlsx) df2 pd.read_excel(2.xlsx)# 检查两个DataFrame的列是否相同 if list(df1.columns) ! list(df2.columns):print("两个Excel文件的列不一致。")print("文件1的列:", df1.co…

AI智能体|手把手教你申请一个Kimi(Moonshot)的API KEY

大家好,我是无界生长。 今天分享一下如何申请一个Kimi(Moonshot)的API KEY,为后面Kimi(Moonshot)接入微信机器人做铺垫。学会了的话,欢迎分享转发! 前提 拥有一个Kimi(Moonshot)账号 使用手机号注册即可,新用户可免费…

oracle如何设计生成token给程序使用

在Oracle中设计生成token(令牌)供程序使用通常涉及几个步骤,这些步骤可能因您的具体需求和使用的技术栈而有所不同。以下是一个基本的指南,描述了如何设计并生成token: 确定token的用途和属性: 确定token…

【线程创建】——三种方式➕多线程案例练习

02 线程创建 Thread , Runnable , Callable 三种创建方式 Thread class - 继承Thread类 (重点) Runnable接口 - 实现Runnable接口 (重点) Callable接口 - 实现Callable接口 (了解) Thread 类实现 它继承了老祖宗 Object java.lang.Object java.lang.Thread 它实现了 Runnab…

文本到语音的学习笔记:从Docker开始

1.docker 是什么意思? Docker 是一种开源的容器化平台,它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后可以在任何支持Docker的系统上运行这个应用,而不必担心环境差异导致的问题。 以下是Docker的一些关键特…

原子操作std::atomic

std::atomic是 C11 标准库提供的一个模板类,用于实现原子操作。原子操作是指不会被线程调度机制打断的操作,即这种操作一旦开始,就一直运行到结束,中间不会有任何线程切换。在多线程编程中,原子操作对于确保数据的一致…

EasyExcel 导出,保留两位小数并显示 千分位

实体类 属性类型为 BigDecimal 注解 NumberFormat("#,###.00") 试过了不顶用,原因不太清楚 值为 0.81 这种,导出后变为 .81 所以,换个思路,写个转换器,就是麻烦点 转换器 BigDecimalConvert import cn.h…

【go项目01_学习记录11】

操作数据库 1 文章列表2 删除文章 1 文章列表 (1)先保证文章已经有多篇,可以直接在数据库中添加,或者访问链接: localhost:3000/articles/create,增加几篇文章。 (2)之前设置好了articles.ind…

【Web后端】监听器Listener

1、简介 用来监听Servlet组件对象状态发生变化的组件可以监听的源包括:ServetRequest、HttpSession、ServletContext当监听到事件源状态发生变化时&#xff0c;会有对应的响应行为 2、使用方法 在web.xml文件中配置 <listener> <listener-class>com.coder.util.…

【DevOps】详解 Linux 用户和权限管理:添加用户、分组及文件权限设置

目录 1. 用户管理 用户分类 用户相关文件 常用命令 2. 组管理 组相关文件 常用命令 3. 权限管理 文件权限 权限表示 修改权限 修改所有者和所属组 特殊权限 4. 示例 命令的详细解释 权限解释 示例&#xff1a;文件权限 -rw-r--r-- 的含义 在 Linux 中&#xf…

栈队列经典OJ题(详细过程)

1. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 第一题判断有效的括号&#xff0c;这道题我们会用到栈的知识&#xff0c;栈是后进先出的&#xff0c;可以根据这个来解这道题&#xff0c;先看一下题目和示例。 1.1整体思路 我们通过示例可以看出括号匹配就返回true&am…

【JAVA】BOSS系统发版艺术:构建高效、优雅的微服务部署策略

在现代软件开发领域&#xff0c;微服务架构与容器化部署已迅速成为行业新趋势。微服务架构通过将应用拆分成多个小型、自治的服务单元&#xff0c;每个服务承担某项特定的业务功能。而容器化部署则以其轻量级和高度可移植的特性&#xff0c;为这些微服务的有效打包、分发和运行…

机器学习 - 不同分类模型的比较

一、模型训练 本案例中&#xff0c;我们将通过四种不同的模型来预测泰坦尼克号乘客的生存情况。 一下是训练的具体步骤。 加载数据 从seaborn库中加载目标数据。该数据集包括多个特征&#xff0c;如 PassengerId, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabi…

科技查新中的工法查新点如何确立与提炼?案例讲解!

按《工程建设工法管理办法》( 建 质&#xff3b;2014&#xff3d;103 号) &#xff0c;工法&#xff0c;是指以工程为对象&#xff0c;以工艺为核心&#xff0c;运用系 统工程原理&#xff0c;把先进技术和科学管理结合起来&#xff0c;经过一定工程实践形成的综合配套的施工方…

探索美国动态IP池:技术赋能下的网络安全新篇章

在数字化飞速发展的今天&#xff0c;网络安全成为了各行各业关注的焦点。特别是在跨国业务中&#xff0c;如何保障数据的安全传输和合规性成为了企业面临的重要挑战。美国动态IP池作为一种新兴的网络技术&#xff0c;正逐渐走进人们的视野&#xff0c;为网络安全提供新的解决方…

黑马甄选离线数仓项目day02(数据采集)

datax介绍 官网&#xff1a; https://github.com/alibaba/DataX/blob/master/introduction.md DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。 DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre…

Java中List接口中方法的使用(初学者指南)

Java中List接口中方法的使用&#xff08;初学者指南&#xff09; 在Java中&#xff0c;List接口是Collection接口的子接口&#xff0c;它表示一个有序的集合&#xff0c;其中的元素都可以重复。List接口提供了许多额外的方法&#xff0c;用于对元素进行插入、删除、查询等操作…

计算机Java项目|Springboot学生读书笔记共享

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、Python项目、前端项目、人工智能与大数据、简…

C++通过json文件配置参数

一、安装nlohmann json nlohmann json&#xff1a;安装_nlohmann安装-CSDN博客 依次执行下面指令&#xff1a; git clone https://gitee.com/cuihongxi/mov_from_github.gitcd json-developmkdir buildcd buildcmake ..makesudo make install 二、安装完成后使用 #include…