第 03 篇 InnoDB 的数据到底存在哪:从表空间到行格式
2026/8/6 2:55:51 网站建设 项目流程

开篇钩子

t_user里删掉 50 万行,.ibd文件为什么一点没变小?一行数据最长能存多少?为什么varchar(65535)建表会报错?这两个问题的答案藏在同一个地方:InnoDB 的物理存储结构。很多人把 InnoDB 当黑盒,SQL 能跑就完了。但只有理解了存储层,你才能真正看懂 B+ 树的高度、索引大小的计算、间隙锁的加锁范围,以及"为什么 OPTIMIZE TABLE 能让查询变快"。

1. 存储层级:表空间 → 段 → 区 → 页 → 行

InnoDB 的物理存储是一个严格的五层嵌套结构:

表空间(Tablespace,.ibd 文件) └─ 段(Segment):叶子节点段 + 非叶子节点段 + 回滚段等 └─ 区(Extent):连续 64 个页 = 1 MB └─ 页(Page):固定 16 KB,InnoDB 与磁盘交互的最小单位 └─ 行(Row):具体的数据记录

innodb_file_per_table=ON(5.7 默认开启)意味着每张表有自己独立的.ibd文件,表删除时空间立刻归还给 OS。关闭则所有表的数据都堆在共享表空间ibdata1,那个文件只增不减,是历史上著名的坑。

区(Extent)的意义:InnoDB 申请磁盘空间时以区(1MB)为

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询