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

mysql原理--补充

1.InnoDB 行格式有哪些?

InnoDB 提供了 4 种行格式,分别是 Redundant、Compact、Dynamic和 Compressed 行格式。

  • Redundant,基本废弃
  • Compact,紧凑格式
  • Dynamic和 Compressed 类似Compact.

2.COMPACT 行格式长什么样?

记录的额外信息

1. 变长字段长度列表
举例:

现在 t_user 表里有这三条记录:

先来看第一条记录:

  • name 列的值为 a,真实数据占用的字节数是 1 字节,十六进制 0x01;
  • phone 列的值为 123,真实数据占用的字节数是 3 字节,十六进制 0x03;
  • age 列和 id 列不是变长字段,所以这里不用管。

这些变长字段的真实数据占用的字节数会按照列的顺序逆序存放,所以「变长字段长度列表」里的内容是「 03 01」,而不是 「01 03」。

同样的道理,我们也可以得出第二条记录的行格式中,「变长字段长度列表」里的内容是「 04 02」,如下图:

第三条记录中 phone 列的值是 NULL,NULL 是不会存放在行格式中记录的真实数据部分里的.

每个变长字段的「变长字段长度」需要用多少字节表示?
具体情况分为:

  • 如果变长字段允许存储的最大字节数小于等于 255 字节,就会用 1 字节表示「变长字段长度」;
  • 如果变长字段允许存储的最大字节数大于 255 字节,就会用 2 字节表示「变长字段长度」;

为什么「变长字段长度列表」的信息要按照逆序存放?
「记录头信息」中指向下一个记录的指针,指向的是下一条记录的「记录头信息」和「真实数据」之间的位置,这样的好处是向左读就是记录头信息,向右读就是真实数据,比较方便。

「变长字段长度列表」中的信息之所以要逆序存放,是因为这样可以尽量使得位置靠前的字段的真实数据和数据对应的字段长度信息可以同时在一个 CPU Cache Line 中,同样的道理, NULL 值列表的信息也需要逆序存放。

每个数据库表的行格式都有「变长字段字节数列表」吗?
「变长字段长度列表」只出现在数据表有变长字段的时候。

2. NULL 值列表
如果存在允许 NULL 值的列,则每个列对应一个二进制位(bit),二进制位按照列的顺序逆序排列。

  • 二进制位的值为1时,代表该列的值为NULL。
  • 二进制位的值为0时,代表该列的值不为NULL。

另外,NULL 值列表必须用整数个字节的位表示(1字节8位)

先来看第一条记录,第一条记录所有列都有值,不存在 NULL 值:

但是 InnoDB 是用整数字节的二进制位来表示 NULL 值列表的,现在不足 8 位,所以要在高位补 0:

所以,对于第一条数据,NULL 值列表用十六进制表示是 0x00。
接下来看第二条记录:

最后第三条记录:

每个数据库表的行格式都有「NULL 值列表」吗?
当数据表的字段都定义成 NOT NULL 的时候,这时候表里的行格式就不会有 NULL 值列表了。

3. 记录头信息
记录头信息中包含的内容很多,我就不一一列举了,这里说几个比较重要的:

  • delete_mask :标识此条数据是否被删除。
  • ext_record:下一条记录的位置。从这里可以知道,记录与记录之间是通过链表组织的。
  • record_type:表示当前记录的类型,0表示普通记录,1表示B+树非叶子节点记录,2表示最小记录,3表示最大记录

记录的真实数据

记录真实数据部分除了我们定义的字段,还有三个隐藏字段,分别为:row_id、trx_id、roll_pointer,我们来看下这三个字段是什么。

  • row_id,如果我们建表的时候指定了主键或者唯一约束列,那么就没有 row_id 隐藏字段了。如果既没有指定主键,又没有唯一约束,那么 InnoDB 就会为记录添加 row_id 隐藏字段。row_id不是必需的,占用 6 个字节。
  • trx_id,事务id,表示这个数据是由哪个事务生成的。 trx_id是必需的,占用 6 个字节。
  • roll_pointer,这条记录上一个版本的指针。roll_pointer 是必需的,占用 7 个字节。
http://www.jsqmd.com/news/1246312/

相关文章:

  • UE5 C++与UnLua脚本交互实战:接口调用与Lua栈操作详解
  • 解压缩软件怎么选?从格式兼容到文件安全的四个判断标准
  • Java、C、Python、PHP、C#五门主流编程语言核心特性与应用场景深度对比
  • C++线程安全队列:从互斥锁到无锁与IOCP的三种实现方案
  • 泰格豪雅服务项目及价格查询|全新维修地址和电话权威信息通知(2026年7月最新) - 亨得利官方服务中心
  • 湘楚人力越南实体机构落地!全周期服务护航中资企业出海
  • 权威核验!2026年7月浪琴香港售后网点地址与客服电话汇总 - 浪琴服务中心
  • 2026年7月最新成都百达翡丽售后服务热线与网点地址查询 - 百达翡丽服务中心
  • 云边协同赋能风电现场安全:基于土星云SE110S-WA32的智慧工地整体解决方案
  • Kimi K3与Claude Fable 5代码能力对比:前端基准之外的实用选择指南
  • 2026年7月最新伯爵温州吾悦广场维修保养服务电话 - 亨得利钟表维修中心
  • 深入解析TMS320C5x DSP的HPI与串行端口通信机制及指令集优化
  • 95 后博士刘宇离职商汤创业,Vivix 获五轮融资估值 13.2 亿美元!
  • ARM Cortex-M定时器中断寄存器深度解析:GPTMRIS、GPTMMIS与GPTMICR实战指南
  • 亲身到店探访深圳江诗丹顿售后服务中心|全新地址及24小时服务电话(2026年7月最新) - 江诗丹顿服务中心
  • 电商运营批量剪带货视频,适合用什么 AI 剪辑工具?
  • AMD大会前夕英伟达摊牌“卖AI工厂”战略,Vera CPU多项性能超传统x86
  • OBS WebSocket插件安装配置与自动化控制实战指南
  • 教育场景的 AI UI 生成:学习路径可视化与交互式课件的自动设计
  • 销售团队拓客软件推荐:优客源 APP 如何帮助团队提升 3 倍获客效率
  • 从“一问一答“到“自主运转“:AI 应用形态的三次进化与技术体验
  • 最小生成树1(Prim模板)、最小生成树2(kruskal模板)、最近公共祖先(模板)
  • 深入解析Cortex-M4系统控制寄存器:从原理到RTOS与低功耗实战
  • 2026年最新教程:上传照片提示文件过大怎么办亲测有效方法 - 图片处理研究员
  • 2026年北京市顺义区靠谱装修公司推荐 覆盖老房翻新、局改与一站式整装 - 装企精灵GEO
  • 2026 北京 GEO 头部公司盘点,从落地案例看真实服务实力
  • AI工具如何提升学术写作效率:从选题到投稿的全流程指南
  • Kimi K3与AI智能体开发实战:从长文本处理到自动化工作流
  • Mongo CRUD 基础实战——用户与商品管理
  • 深入解析SCI/LIN模块:轮询、中断、DMA模式与低功耗设计实战