innodb 存储引擎之:记录的数据结构,数据页的数据结构

【innodb 阅读笔记】之 数据页结构介绍 此前我们了解到,在 InnoDB 存储引擎中,页是管理数据库的最小磁盘单位,其中 b-tree Node 页存放着表中的实际行数据。接下来,让我们深入底层,一探 InnoDB 数据页的内部存储结构,这对理解其工作原理与数据库高效运行机制意义重大。 阅读详情

目录

innodb 行格式

COMPACT 行格式

记录的额外信息

变长字段长度列表

NULL值列表

记录的头信息

记录的真实数据

innodb数据页结构示意图

File Header

Page Header(页头部)

lnfimum + Supremum

User Records

Free Space

Page Directory(页目录)

File Trailer

一个数据页的示意图


innodb 行格式

innodb 有4中不同类型的行格式,分别是

  • COMPACT
  • REDUNDANT
  • DYNAMI
  • COMPRESSED

创建表时,可以执行表的行格式, create table t (''''''') ROW_FORMAT = COMPACT

COMPACT 行格式

记录的额外信息

变长字段长度列表

所有变长字段的真实数据占用 字节数都存放在记录的开头位置,从而形成一个变长字段长度列表,各变长字段的真实数据占用的字节数按照列的顺序逆序存放(再次强调一遍,是逆序存放)

NULL值列表

一条记录中的某些列可能存储 NULL 值,所以把一条记录中值为 NULL 的列统一管理起来,存储到 “NULL 值列表”,如果表中没有允许存储 NULL 的列,则 NULL 值列表也就不存在了

记录的头信息

记录的头信息占用空间为 5 字节,也就是 40个二进制位

记录头信息中各二进制位代表的意思

重点需要知道,deleteed_flag,n_owned,record_type,next_record 各个字段的含义

记录的真实数据

记录的真实数据除了保存了,表的一条记录的各个列的数据外,MySQL 会为每个记录默认地添加一些列(也称为隐藏列),见下图

innodb数据页结构示意图

innodb 读取数据的方式是以“页”为单位,作为磁盘和内存之间交互的基本单位,innodb 默认的页大小为 16KB。

innodb_page_size 控制“页”的大小,在mysql运行的过程中是无法修改此配置的,也就是说该配置是不能动态修改的,如果要让修改后的值生效,只能重启。

各部分解释

在一开始生成页的时候,其实并没有 User Records 部分,每当插入一条记录时都会从 Free Space 部分(也就是尚未使用的存储空间〉申请一个记录大小的空间,并将这个空间划分到 User Records 部分。当 Free Space 部分的空间全部被 User Records 部分替代掉之后,也就意味着这个页使用完了,此时如果还有新的记录插入,就需要去申请新的页了 。这个过程如下图所示

File Header

占股东的38字节,各个字节的具体用途

重点需要知道 图中标黄的部分

Page Header(页头部)

固定占用56字节,各个字节的具体用途

重点需要知道图中标黄的部分

lnfimum + Supremum

两个虚拟的伪记录 ,分别表示页中的最小记录和最大记录,占固定的 26 字节

User Records

真正存储记录的地方,大小不固定

Free Space

页中尚未使用的部分,大小不固定

Page Directory(页目录)

大小不固定,插入的记录越多,“槽”就越多,占用空间就越多

什么是“槽”

为了提高“数据页”内查询数据的效率,innodb 设计了 “槽”

介绍“槽”之前先介绍,“组”

  • 对于 Infimum 记录所在的分组只能有 1 条记录, Supremum 记录所在的分组拥有的记录条数只能在 1 -- 8 条之间,剩下的分组中记录的条数范围只能是在 4 -- 8 条之间。
  • 当一个组的记录数等于 8 后,在插入一条记录,会将组中的记录拆分成两个组,其中一个组 4 条记录,另一个组 5 条件记录。

“槽”是怎么来的

  1. 将所有正常的记录(包括 Infimum Supremum 记录,但不包括已经移除到垃圾链表的记录)划分为几个组
  2. 每个组的最后一条记录(也就是组内最大的那条记录)相当于"带头大哥"组内其余的记录相当于"小弟”,“带头大哥"记录的头信息中的 n_owned 属性表示该组内共有几条记录
  3. 将每个组中最后一条记录在页面中的地址偏移量(就是该记录的真实数据与页面中第0个字节之间的距离〉单独提取出来,按顺序存储到 Page Directory, 页目录中这些地址偏移量称为槽 (Slot),每个槽占用2字节,页目录就是由多个槽组成的

File Trailer

保存页的校验和

一个数据页的示意图

在一个数据页中查找指定主键值的记录时,过程分为两步

  • 通过二分法确定该记录所在分组对应的槽,然后找到该槽所在分组中主键值最小的那条记录
  • 通过记录的 next record 属性遍历该槽所在的组中的各个记录

在 B+TREE 同一层的数据页与数据页之间是双向链表,数据页内记录与记录之间是单向链表

[企业AI落地] RAG 知识库系统在多租户环境下的细粒度权限隔离设计 多租户 RAG 系统真正的风险不只是搜不到,而是把不该看到的内容查出来、说出来、写回去。本文结合多客户售后知识助手场景,用元数据结构、向量检索过滤、回答策略和审计回写示例拆解租户、资源、检索、生成、审计五层权限边界。 阅读详情

相关推荐

多IMU车载GNSS/INS数据集及介绍

文章目录前言非常棒的GINS数据集采集轨迹采集时间MEMS IMU详细信息IMU测量值方程及相关误差建模参考噪声参数安装参数文件格式描述 前言 “本文作者感谢武汉大学多源智能导航实验室和牛小骥教授提供了本文所需的GNSS/INS数据集。” 本博文介绍数据集链接为多IMU车载GNSS、INS数据集,欢迎大家下载,由于是开源数据集,因此下载不需要积分 非常棒的GINS数据集 这是一套非常好的用于GNSS/INS组合导航应用的车载数据集,本数据集采集于湖北省武汉市一处工业园区,为开阔天空场景,GNSS R

十八与她的博客 6443

MySQL 的记录存储结构、存储引擎与 Buffer Pool

在 MySQL 中,数据到底是如何进行存储的呢。

sekever的博客 1198

几率大的Redis面试题(含答案)

本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制【~】 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Red...

睶 38万+

InnoDB数据存储结构

页a, 页b, 页c… 页n这些页可以不在物理结构上相连, 只要通过双向链表相关联即可. 每个数据页中的记录会按照主键值从小到达的顺序组成一个单向链表, 每个数据页都会为存储在它里面的记录生成一个页目录, 在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽位, 然后再遍历该槽对应分组中的记录即可快速找到指定的记录页目录等我们下面详细介绍页结构的会讲解注意: 这些页是同一层的页, 可以不在物理结构上相连, 但是页分配的时候确实是相连的, 但是呐不是同一层相连。

m0_57001006的博客 1943

【已解决】App unavailable Unfortunately, Claude is only available in certain countries and regions

App unavailable Unfortunately, Claude is only available in certain countries and regions right now. We will soon publish a list of supported locations on our website.

weixin_43941438的博客 3万+

Thompson Sampling vs UCB:5个真实业务场景下的算法选型指南

本文深入对比了Thompson Sampling与UCB算法在电商推荐、在线广告、医疗试验、金融定价和游戏调整五大真实业务场景下的表现。通过量化指标分析,为技术决策者提供了清晰的选型指南:Thompson Sampling凭借其概率匹配和贝叶斯框架,在需要快速收敛、处理冷启动及复杂约束的场景中通常更具优势;而UCB则在要求确定性、可解释性和理论保证的场景下表现更佳。

weixin_29181861的博客 153

InnoDB 数据文件结构详解

一,InnoDB存储文件结构 InnoDB数据文件存储结构: 一个ibd数据文件-->Segment(段)-->Extent(区)-->Page(页)-->Row(行) Tablesapce 表空间,用于存储多个ibd数据文件,用于存储表的记录和索引。一个文件包含多个段。 Segment 段,用于管理多个Extent,分为数据段(Leaf node segment)、索引段(Non-leaf node segment)、回滚段(...

FYHannnnnn的博客 1834

UE5游戏逆向实战:用FModel提取.pak文件中的3D模型(附Dumper-7避坑指南)

本文详细介绍了如何使用FModel工具从UE5游戏的.pak文件中提取3D模型,并提供了Dumper-7的避坑指南。内容涵盖FModel工具链配置、UE5特有的unversioned properties问题解决方案、Dumper-7实战流程以及模型后处理技巧,帮助开发者高效获取游戏资产。

weixin_30872499的博客 424

MySQL中的InnoDB存储引擎的数据页结构

1. InnoDB为了不同的目的而设计了不同类型的页,我们把用于存放记录的页叫做 数据页。2. 一个数据页可以被大致划分为7个部分,分别是File Header ,表示页的一些通用信息,占固定的38字节。Page Header ,表示数据页专有的一些信息,占固定的56个字节。Infimum + Supremum ,两个虚拟的伪记录,分别表示页中的最小和最大记录,占固定的 26 个字节。User Records :真实存储我们插入的记录的部分,大小不固定。

weixin_64965172的博客 1119

【maxENT】从数据到地图:R语言实现最大熵物种分布建模全流程解析

本文详细解析了如何使用R语言实现最大熵模型(MaxEnt)进行物种分布建模的全流程。从数据准备、环境变量处理到模型训练与参数调优,再到模型评估与结果可视化,提供了实用的代码示例和避坑指南。特别适合生态学研究者利用最大熵模型处理物种分布数据,提升研究效率。

weixin_27244795的博客 216

喷涂机器人系列编程:ABB IRB 5500_(2).ABB IRB 5500喷涂机器人系统架构与组件

ABB IRB 5500喷涂机器人系统不仅在性能上表现出色,而且在安全和维护方面也提供了全面的解决方案。通过本文的详细介绍,希望读者能够更好地理解和掌握这一系统的架构和功能,为实际应用提供有力支持。

zhubeibei168的博客 779

Mysql一:InnoDb行格式、数据页结构

一、局部性原理 存储引擎负责对表中的数据的进行读取和写入,常用的存储引擎有InnoDB、MyISAM、Memory等,不同的存储引擎有自己的特性,数据在不同存储引擎中存放的格式也是不同的,比如Memory都不用磁盘来存储数据。 在InnoDB中,数据会存储到磁盘上,在真正处理数据时需要先将数据加载到内存,表中读取某些记录时,InnoDB存储引擎不需要一条一条的把记录从磁盘上读出来,InnoDB采...

严老板的技术梦想博客 1万+

RK3588平台开发系列讲解(项目篇)常见模型结构

📢 AI 模型常采用人工神经网络来模拟人脑神经的记忆和处理信号的能力。常见的人工神经网络类型有深度神经网络(Deep Neural Network,DNN)、卷积神经网络(Convolutional Neural Network,CNN)、循环神经网络(Recurrent Neural Network,RNN)等。

内核笔记 1759

MySQL存储引擎InnoDB之数据页

InnoDB存储引擎——数据页

小萌新的博客 2171

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【InnoDB 存储引擎】InnoDB 数据页格式(详细版,数据页格式对于理解索引详细的原理很重要)

15.6.1 InnoDB 数据页格式(数据页理论,重要).md

yuchangyuan5237的博客 1101

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【MySQL】InnoDB存储引擎

对数据的修改操作,首先修改内存结构中的缓冲区的页,缓冲区的页与磁盘中页的数据不一致,因此称缓冲区中的页为脏页。

见见大魔王 4648

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深耕MySQL - InnoDB存储引擎的数据页结构

文章目录1.1 InnoDB页的概念1.2 数据页的结构1.3 记录在页中的存储1.4 Page Directory页目录1.5 File Header文件头部1.6 InnoDB页和记录的关系1.7 没有索引时查找记录 1.1 InnoDB页的概念 InnoDB是一个将表中的数据存储在磁盘上的存储引擎,即使我们关闭并重启服务器,数据还是存在。而真正处理数据的过程发生在内存中,所以需要把磁盘中的数据加载到内存中,所以需要把磁盘中的数据加载到内存中。如果处理写入和修改请求,还需要将内存中的内容刷新到磁盘上。而

你今天真好看呀 761

mysql存储引擎InnoDB详解,从底层看清InnoDB数据结构

InnoDB一个支持事务安全的存储引擎,同时也是mysql的默认存储引擎。本文主要从数据结构的角度,详细介绍InnoDB行记录格式和数据页的实现原理,从底层看清InnoDB存储引擎。 本文主要内容是根据掘金小册《从根儿上理解 MySQL》整理而来。如想详细了解,建议购买掘金小册阅读。 InnoDB简介 大家都知道mysql中数据是存储在物理磁盘上的,而真正的数据处理又是在内存中执行的。由于磁盘的读写速度非常慢,如果每次操作都对磁盘进行频繁读写的话,那么性能一定非常差。为了上述问题,InnoDB将数据划

伍六七 1012

【InnoDB数据存储结构】第1章节:数据页存储结构

InnoDB数据页存储结构。

一宿君 1768

MySQL—InnoDB数据页结构

MySQL—InnoDB数据页结构 概述 它是InnoDB管理存储空间的基本单位,一个页的大小一般是16KB。我们表中记录都是存放在页中的,官方称这种存放记录的页为索引(INDEX)页。因为这种类型的页是用来存放表数据的,也可以称为数据页。 一个InnoDB数据页的存储空间大致被划分成了7个部分,有的部分占用的字节数是确定的,有的部分占用的字节数是不确定的。如下图 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fpFEMOwY-1596768467612)(.\images\

多一天,多一点 1911

InnoDB数据页结构

数据页详解

sunriseYJP的博客 1194

一文带你了解MySQL之InnoDB 数据页结构

学完了记录结构,我们该学数据页的结构,前边我们简单的提了一下页的概念,它是Innodb管理存储空间的基本单位,页的大小默认16KB,InnoDB为了不同的目的而设计了许多种不同类型的页,比如存放表空间头部信息的页,存放Insert Buffer信息的页,存放INODE信息的页,存放undo日志信息的页等等等等。而我们聚焦的是那些存放我们表中记录的那种类型的页,官方称这种存放记录的页为索引(INDEX)页,鉴于我们还没有了解过索引是个什么东系,而这些表中的记录就是我们日常口中所称的数据,所以目前还是叫这种存放

Multis 1587

mysql中InnoDB的数据页的结构

一开始新生成的数据页是没有User Records (用户记录)部分的,当有记录插入时,就会从Free Space(空闲空间)部分申请一部分空间来存储插入的记录,随着插入记录的增多,Free Space(空闲空间)部分的空间会全部被User Records (用户记录)部分替代,这个时候再新插入数据的时候便会新产生一个页。当组中记录超过8条时,会将组拆分成两个组,一个组4条,一个组5条,然后新生成的组会在数据页中的Page Directory部分新增一个槽,用来存放新生成组的最大记录的偏移量。

qq_41534540的博客 812

mysql之Innodb数据页

存储管理:动态空间分配与碎片重用,平衡空间利用率与性能。查询优化:页目录和有序链表结构,支持高效点查与范围扫描。可靠性:校验和与LSN机制确保数据完整性,应对意外中断。理解数据页结构对数据库调优(如合理选择行格式、监控页分裂、调整参数)、故障排查(如空间碎片分析)和性能优化具有重要指导意义。

qq_43460315的博客 981
上一篇: memory 存储引擎
下一篇: innodb存储引擎之:表空间
三易的博客
博客等级 码龄15年 42粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值