D
AI
学习工作台
8 周后端冲刺2026-05-221 分钟阅读

InnoDB 存储结构

页、聚簇索引、Buffer Pool 与 redo/undo

8周冲刺week5MySQLInnoDB记笔记标记疑惑

InnoDB 架构概览

InnoDB 是 MySQL 默认 事务型 存储引擎:行级锁、MVCC、崩溃恢复。Week 5 五篇形成索引→事务→锁→EXPLAIN 闭环,建议配合 /chapters/mysql-interview/innodb-storage 交互 Lab。

逻辑 vs 物理结构

  • Tablespace:表空间文件 .ibd(每表一文件)或系统表空间。
  • Segment / Extent / Page:空间分配层次。
  • Row:变长字段、NULL bitmap、隐藏列 DB_TRX_IDDB_ROLL_PTR

聚簇索引

主键即数据:按主键顺序 B+ 树存储。无显式主键则选唯一非空索引,否则隐式 row_id。

二级索引:叶子存 (索引列, PK),查其他列 → 回表 再查聚簇索引。

Buffer Pool

内存中缓存 数据页。LRU 变种(young/old 区)防全表扫描污染。

  • :miss 则从磁盘 load 页。
  • :改内存页为脏页,异步 flush;WAL 先写 redo log。

redo 与 undo

  • redo log:物理/逻辑 redo,保证已提交事务持久(crash 后 replay)。
  • undo log:事务回滚与 MVCC 旧版本链(见 week05-transaction-mvcc)。

与 OS 虚拟内存

Buffer Pool 是用户态缓存;OS page cache 也可能缓存同一文件。Double buffering 理解即可。

面试表达

  • 为何推荐自增主键:顺序插入减少页分裂。
  • UUID 主键:随机插入导致碎片与缓冲池 churn。
  • 行溢出:长 VARCHAR/TEXT 部分存 overflow 页。
  • 实战巩固与面试表达

    本篇属于 8 周冲刺 week05-innodb-storage 主题。复习时先闭卷回答 frontmatter 中三张 flashcard,再展开口述两个「为什么」:为什么这种方案能 work、边界失败时如何降级。与相邻章节对照:算法篇强调复杂度与模板,Go 篇强调工程默认写法,中间件篇强调线上故障案例。

    动手与自检清单

    用 25 分钟限时做 1 道相关练习题或画出一张架构/数据结构示意图;用 5 分钟写 STAR 片段说明你在项目里是否用过类似技术。记录 3 个面试追问及你的标准答法,存入 /zh/notebook/master-plan 笔记。若某点不熟,回到对应 /chapters 交互 Lab 重新走一遍流程,比死记卡片更有效。

    易错点提醒

    避免只背名词不会画图;避免只说优点不谈 trade-off(性能、一致性、运维成本至少提一项);避免把学习 Demo 说成百万 QPS 生产。回答时使用「场景 → 方案 → 结果 → 反思」四段式,体现工程成熟度。

    自检

    画聚簇 + 二级索引 B+ 树示意图;解释 flush 策略与 checkpoint。下一篇:week05-index-query-path

    知识卡片

    问题

    InnoDB 表数据存在哪里?

    点击翻转查看答案

    答案

    聚簇索引 B+ 树叶子节点存完整行;二级索引叶子存主键值,查非覆盖列需回表。

    问题

    Buffer Pool 作用?

    点击翻转查看答案

    答案

    缓存数据页与索引页,减少磁盘 IO;脏页由 redo log 保证崩溃恢复后提交事务不丢。

    问题

    页(Page)默认大小?

    点击翻转查看答案

    答案

    通常 16KB;InnoDB IO 最小单位,行、索引条目组织在页内,页分裂合并影响写入性能。