从根上理解 mysql -数据在页中是怎么存储的

之前说了,一行数据是怎么存储的。现在来看下 数据在页中是怎么存储的

基础知识

  • 页是Innodb管理的存储空间的基本单位,一般是16kb
  • 页分为好多类型 大概十多种,面试中平时所说的页即为索引页(数据页),当然也有像insert buffer、undo、INODE页等等

数据页结构

在这里插入图片描述
一个一个的介绍

1. File Header

所有类型的页都适用 记录页的通用信息

  • FIL_PAGE_SPACE_OR_CHKSUM 校验和 其实就是方便比较字符串 用某种算法计算出的一个值 用户校验页面的完整性 和File Trailer 中的值是对应的
  • FIL_PAGE_OFFSET 页号
  • FIL_PAGE_PREV 、FIL_PAGE_NEXT 上一个和下一个页号 双向链表
  • FIL_PAGE_TYPE 页的类型 很多

2. Page Header-页面头部

占用固定的56个字节,专门存储各种状态信息 数据页专用

  • PAGE_N_DIR_SLOTS 在页目录中的槽数量
  • PAGE_HEAP_TOP 还未使用的空间最小地址,也就是说从该地址之后就是Free Space
  • PAGE_N_HEAP 本页中的记录的数量(包括最小和最大记录以及标记为删除的记录
  • PAGE_FREE 第一个已经标记为删除的记录地址(各个已删除的记录通过next_record也会组成一个单链表,这个单链表中的记录可以被重新利用)
  • PAGE_GARBAGE 已删除记录占用的字节数
  • PAGE_LAST_INSERT 最后插入记录的位置
  • PAGE_DIRECTION 记录插入的方向
  • PAGE_N_DIRECTION 一个方向连续插入的记录数量
  • PAGE_N_RECS 该页中记录的数量(不包括最小和最大记录以及被标记为删除的记录)
  • PAGE_MAX_TRX_ID 修改当前页的最大事务ID,该值仅在二级索引中定义
  • PAGE_LEVEL 当前页在B+树中所处的层级
  • PAGE_INDEX_ID 索引ID,表示当前页属于哪个索引
  • PAGE_BTR_SEG_LEAF B+树叶子段的头部信息,仅在B+树的Root页定义
  • PAGE_BTR_SEG_TOP B+树非叶子段的头部信息,仅在B+树的Root页定义

3. Infimum + Supremum

在这里插入图片描述
最小记录和最大记录,两个虚拟的行记录 5 记录头+ 8 固定 表示单词

4. User Records

用户的实际数据。一开始生成页的时候 并没有User Records。插入数据的时候会从 Free Space中申请一个记录大小的空间划分到User Records中。
在这里插入图片描述

5. Free Space

空闲页

6. Page Directory-页目录

B+树 的检索是按照页去检索的,但是页中的记录怎么检索呢。实际上,页中也是分了组的,而 Page Directory中记录的就是每组中最大记录的偏移量。每组中的最大的记录行中的n_owned属性即记录这个组中有几条记录。

分组的标准:

  • 对于最小记录所在的分组只能有 1 条记录
  • 最大记录所在的分组拥有的记录条数只能在 1~8 条之间,剩下的分组中记录的条数范围只能在是 4~8 条之间。
    在这里插入图片描述

7. File Trailer

前4个字节:页的校验和 和 Page Header相对应

后4个字节:页面被最后修改时对应的日志序列位置(LSN)

最后再多说一句

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在C#中编程绘制和移动线段

这个示例允许用户绘制和移动线段。它允许您根据鼠标下方的内容执行三种不同的操作。 当鼠标位于某个线段上时,光标会变成手的形状。然后您可以单击并拖动来移动该线段。当鼠标位于线段的终点上时,光标会变成箭头。然后您可以单击并拖动以移动终点。当鼠…

快速学习selenium基础操作

全篇大概19000字(含代码),建议阅读时间1h 什么是Selenium? Selenium是一系列自动化工具集的统称,官方工具有 Selenium IDE、Selenium WebDriver、Selenium Grid, 主要用于桌面端Web应用程序的自动化。能够通…

说下JVM中一次完整的GC流程?

大家好,我是锋哥。今天分享关于【说下JVM中一次完整的GC流程?】面试题。希望对大家有帮助; 说下JVM中一次完整的GC流程? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在JVM中,垃圾回收(GC&am…

Vue.createApp的对象参数

目录 template 属性 data 属性 methods 属性 疑问 function 函数的两种写法 methods 属性中 this 的指向 总结 Vue 实例是通过 Vue.createApp() 创建的,该函数需要接收一个对象作为参数,该对象可添加 template、data、methods 等属性。 template …

前端H5移动端基础框架模板 :Vue3 + Vite5 + Pinia + Vant4 + Sass + 附源码

技术栈选用 Vue3 Vite5 Pinia Vant4 Sass 源码地址: git clone https://gitee.com/gaiya001/h5-APP.git1. 1.vite.config.js文件配置 ** import { defineConfig } from vite // 导入 Vite 的配置函数 import vue from vitejs/plugin-vue // 导入 Vue 插件 i…

LabVIEW动态加载语言与VI调用 附件有程序

此LabVIEW设计通过动态加载语言资源和调用VI来实现多语言支持和模块化功能。它适用于需要灵活语言切换和动态VI管理的场景,但在开发和维护中有一些需要优化的地方。以下是详细的分析和改进建议。 优点: 灵活的语言切换: 用户可通过加载不同语…

分布式搜索引擎之elasticsearch基本使用2

分布式搜索引擎之elasticsearch基本使用2 在分布式搜索引擎之elasticsearch基本使用1中,我们已经导入了大量数据到elasticsearch中,实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。 所以j接下来,我们研究下…

使用webrtc-streamer查看实时监控

摄像头配置(海康摄像头为例) 摄像头视频编码应改成H264格式 webrtc-streamer下载 webrtc-streamer下载地址 下载后解压出来双击运行,端口默认8000 VUE2项目引入文件 在项目静态文件“public”中需引入两个js文件“webrtcstreamer.js”与“…

鸿蒙调试打包(非正式打包)

文章目录 前言第一步:生成.p12和.csr文件第二步:申请证书的前置步骤第三步:申请证书 前言 HarmonyOS 应用打包后的文件为.app 格式, android 打包后的文件为.apk,IOS 打包后的文件为.apa HarmonyOS通过数字证书&#…

如何利用DBeaver配置连接MongoDB和人大金仓数据库

最近根据国产化要求,需要使用国产数据库,但习惯使用DBeaver连接各种成熟的商业或开源数据库。因此,就想着如何继续基于该工具,连接MongoDB和人大金仓数据库,查了半天很多地方说法不统一,所以自己就简单整理…

手机租赁系统开发指南一站式服务流程解析

内容概要 手机租赁系统的开发是一个复杂但有趣的过程,像搭建乐高一样,只要找到合适的模块,就能打造出一个宾至如归的租赁平台。在这部分,我们将对开发流程的整体结构进行简要概述,并指出每个环节的重要性。 首先&…

Linux中vi和vim的区别详解

文章目录 Linux中vi和vim的区别详解一、引言二、vi和vim的起源与发展三、功能和特性1、语法高亮2、显示行号3、编辑模式4、可视化界面5、功能扩展6、插件支持 四、使用示例1、启动编辑器2、基本操作 五、总结 Linux中vi和vim的区别详解 一、引言 在Linux系统中,vi和…

信息安全管理——应急响应、灾备与恢复

安全管理 信息安全管理 信息安全管理是指通过维护信息的机密性、完整性和可用性来管理和保护信息资产,是对信息安全保障进行指导、规范和管理的一系列活 动和过程。 信息安全管理的意义在于他是组织或者公司管理体系的一个重要环节 ,比如说一所大学就是…

数据库数据恢复—ORACLE常见故障有哪些?如何恢复数据?

Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。 Oracle数据库数据恢复方案: 1、检测存放数据库的服务器/存储设备是否存…

使用 WebStorm 导入已有的 Vue 项目并运行的步骤与注意事项

目录 1. 引言2. WebStorm 环境准备 2.1 安装 WebStorm2.2 配置 Node.js 和 npm2.3 使用 nvm 管理 Node.js 和 npm 版本2.4 npm 版本与 Vue 版本对应关系 3. 导入已有的 Vue 项目 3.1 打开 Vue 项目3.2 安装项目依赖3.3 使用 nvm 控制 Node.js 和 npm 版本 4. 运行 Vue 项目 4.…

C++感受15-Hello Object 封装版 -下(上机)

一步步(分解成九段小视频)带你完成“选美大赛海选报名程序”,从需求到设计再到实现,完整体验,同时边学边用以下知识点: 转换构造、复制构造、转发构造特定成员函数默认实现成员数据初始化列表成员数据默认值…

深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解

目录 深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解 一、引言:为什么要使用Array.find() 二、Array.find()的使用与技巧 1、基础语法 2、返回值 3、使用技巧 三、Array.find()的优势与实际应用案例 1、利用返回引用…

探索 LeNet-5:卷积神经网络的先驱与手写数字识别传奇

一、引言 在当今深度学习技术蓬勃发展的时代,各种复杂而强大的神经网络架构不断涌现,如 ResNet、VGG、Transformer 等,它们在图像识别、自然语言处理、语音识别等众多领域都取得了令人瞩目的成果。然而,当我们回顾深度学习的发展历…

希迪智驾持续亏损8.2亿:毛利率下滑,冲刺“自动驾驶矿卡第一股”

《港湾商业观察》黄懿 近日,希迪智驾(湖南)股份有限公司(下称“希迪智驾”)向港交所主板递交上市申请,联席保荐人为中金公司、中信建投国际、中国平安资本(香港)。 资料显示&#…

Vue 提供了Transition,可以帮助你制作基于状态变化的过渡和动画

官方文档&#xff1a;https://cn.vuejs.org/guide/built-ins/transition.html Transition​ Vue 提供了两个内置组件&#xff0c;可以帮助你制作基于状态变化的过渡和动画&#xff1a; <Transition> 会在一个元素或组件进入和离开 DOM 时应用动画。本章节会介绍如何使用…