当前位置: 首页 > news >正文

什么是页分裂、页合并?

数据组织方式

在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.lryc.cn/news/348386.html

相关文章:

  • 软件2班20240513
  • 嵌入式学习-时钟树
  • 对博客系统基本功能进行自动化测试(Junit + Selenium)
  • 《换你来当爹》:AI驱动的养成游戏,探索虚拟亲子关系的新模式
  • 在idea中使用vue
  • Linux系统编程:进程控制
  • Android 异常开机半屏重启代码分析
  • Kafka从0到消费者开发
  • 01-项目功能,架构设计介绍
  • bvh 好用强大的播放器源码
  • 安阳在线知识付费系统,培训机构如何进行课程体系的设置?
  • 网络编程:服务器模型-并发服务器-多进程
  • React 基础案例
  • 【Python探索之旅】选择结构(条件语句)
  • Recommender ~ Collaborative filtering
  • 我觉得POC应该贴近实际
  • AI 情感聊天机器人工作之旅 —— 与复读机问题的相遇与别离
  • 如何使用ArcGIS Pro进行选房分析
  • android图标底色问题,debug与release不一致
  • 如何提高自己的全局视野?
  • element ui的确认提示框文字样式修改
  • Typescript 哲学 - ts模块使用最佳实践
  • 自动驾驶决策规划——坐标转换
  • 信创应用软件之邮箱
  • TriCore: Architecture
  • 16进制与不同进制之间计算加减乘除的比较快的方法
  • 责任链模式:原理与实现解析,及其应用场景代入
  • 从心理学角度看,GPT 对人有什么影响?
  • 【C语言/数据结构】栈:从概念到两种存储结构的实现
  • 47. UE5 RPG 实现角色死亡效果