Mysql-InnoDB数据页结构

一、页结构说明

 大致分7部分

二、记录在页中的存储

2.1 页面记录内存结构

行格式 存储到 User Records 部分,每当我们插入一条记录,都会从 Free Space 部分申请一个记录大小的空间划分到 User Records 部分 ,用完则申请新的页;

User Records记录行数据-> Free Space 空间->用完则申请下一页面

 mysql> CREATE TABLE page_demo(

-> c1 INT,

-> c2 INT,

-> c3 VARCHAR(10000),

-> PRIMARY KEY (c1) -> )

CHARSET=ascii ROW_FORMAT=Compact; Query OK, 0 rows affected (0.03 sec)

行格式,头信息

mysql> INSERT INTO page_demo VALUES

(1, 100, 'aaaa'), (2, 200, 'bbbb'), (3, 300, 'cccc'), (4, 400, 'dddd');

Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 

 数据存储行信息示意图:

 1、delete_mask:1个二进制位,值为 0 的时候代表记录并没有被删除,为 1 的时 候代表记录被删除掉了;数据分两步加入垃圾链表???

2、min_rec_mask B+树的每层非叶子节点中的最小记录都会添加该标记。

3、heap_no 当前记录在本页 中的位置;0,1是mysql默认的两个伪记录,代表最小值和最大值。

不存放在 页 的 User Records 部分,他们被单独放在 一个称为 Infimum + Supremum 的部分;

****照主键从小到大的顺序形成了一个单链表*****

 2.2 删除数据链表变化


1、第2条记录并没有从存储空间中移除,而是把该条记录的 delete_mask 值设置为 1 。
2、第2条记录的 next_record 值变为了0,意味着该记录没有下一条记录了。
3、第1条记录的 next_record 指向了第3条记录。
4、还有一点你可能忽略了,就是 最大记录 的 n_owned 值从 5 变成了 4。
不论增删改操作,InnoDB始终会维护一条记录的单链表,链表中的各个节点是按照主键值由小到大的顺序连接起来的。

第二条存储空间却没有回收,再次把这 条记录插入到表中,会发生什么事呢?

mysql> INSERT INTO page_demo VALUES(2, 200, 'bbbb'); 

InnoDB 并没有因为新记录的插入而为它申请新的存储空间,而是直接复用了原来被删除记录 的存储空间;(重用垃圾链表的存储空间)

三、Page Directory(页目录)

 

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

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

相关文章

一网打尽java注解-克隆-面向对象设计原则-设计模式

文章目录 注解内置注解元注解 对象克隆为什么要克隆?如何克隆浅克隆深克隆 Java设计模式什么是设计模式?为什么要学习设计模式? 建模语言类接口类之间的关系依赖关系关联关系聚合关系组合关系继承关系实现关系 面向对象设计原则单一职责开闭原…

【LeetCode-中等题】53. 最大子数组和

题目 题解一&#xff1a;暴力解法&#xff1a; //暴力解法 每个元素为都循环一次&#xff0c;持续更新最大值int maxS Integer.MIN_VALUE;for(int i 0;i<nums.length;i){int num 0;for(int j i;j<nums.length;j){num numnums[j];maxS Math.max(maxS,num);}}retur…

SQL查询结果数字转字符串,以及查询结果的的四舍五入

最近在工作中碰到了SQL进行查询&#xff0c;碰到了SQL查询结果位数字型&#xff0c;需要把数字转化为字符串来进行下一步工作&#xff0c;整理结果如下: 先看图&#xff1a; 我们需要的查询data_val的和&#xff0c;这样的查询SQL如下: select sum(data_val) from 表名 where …

Docker安装Jenkins实操记录

前置条件&#xff1a; 1、安装了docker 2、安装了java&#xff08;没有安装情况下&#xff0c;可运行&#xff1a;yum install -y java-1.8.0-openjdk-devel.x86_64&#xff09; 一、拉取镜像 1、docker pull jenkins/jenkins 2、mkdir -p /usr/local/jenkins 3、chmod 777 …

使用端口映射实现Spring Boot服务端接口的公网远程调试:详细配置与步骤解析

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

Php“牵手”淘宝商品详情页数据采集方法,淘宝API接口申请指南

淘宝天猫详情接口 API 是开放平台提供的一种 API 接口&#xff0c;它可以帮助开发者获取商品的详细信息&#xff0c;包括商品的标题、描述、图片等信息。在电商平台的开发中&#xff0c;详情接口API是非常常用的 API&#xff0c;因此本文将详细介绍详情接口 API 的使用。 一、…

11、vue3

一、为什么要学 Vue3 1.1 为什么要学 Vue3 1.2 Vue3的优势 1.3 Vue2 选项式 API vs Vue3 组合式API Vue3 组合式API vs Vue2 选项式 API 二、create-vue搭建Vue3项目 2.1 认识 create-vue 2.2 使用create-vue创建项目 前提环境条件 已安装 16.0 或更高版本的 Node.js node -…

elementui的el-tabs标签页样式修改

一、官网样式&#xff1a; 二、修改样式 1.去掉下划线 效果&#xff1a; 代码: /* 去掉tabs标签栏下的下划线 */ ::v-deep .el-tabs__nav-wrap::after {position: static !important;/* background-color: #fff; */ } 2.改变下划线颜色 效果&#xff1a; 代码&#xff1a;…

压力监测设备——监测压力的仪器仪表

压力监测设备的原理和差压变送器相同&#xff0c;所不同的是压力监测设备低压室压力是大气压或真空。压力监测设备是一种接受压力变量&#xff0c;经传感转换后&#xff0c;按一定比例将压力变化转换成标准信号的仪表。 压力监测设备的输出信号传送到中央控制室进行压力指示和…

matlab面向对象

一、面向对象编程 1.1 面向过程与面向对象 区别&#xff1a; 面向过程的核心是一系列函数&#xff0c;执行过程是依次使用每个函数面向对象的核心是对象&#xff08;类&#xff09;及其属性、方法&#xff0c;每个对象根据需求执行自己的方法以解决问题 对象&#xff1a;单个…

leetcode 118.杨辉三角

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;https://leetcode.cn/problems/pascals-triangle/description/ 代码&#xff1a; class Solution { public:vector<vector<int>> generate(int numRows) {// 先开空间vector<vector<int>> v;v.…

AMBA总线协议(9)——AHB(七):终章

一、前言 在之前的文章中我们讲述了AHB协议的分割传输机制&#xff0c;它使得从机可以决定一次传输是否继续进行&#xff0c;以防止 传输的执行将占据大量的时钟周期&#xff0c;有效提高了总线的公平性与效率问题&#xff0c;本文中我们将一次性学习完AHB最后的内容&#xff0…