知其然,知其所以然
MySQL / InnoDB 2026-09-28

Adaptive Hash Index

本机先发现意外:@@innodb_adaptive_hash_index真实是关闭的。真实打开之后第一遍耗时几乎没变,但adaptive_hash_searches已经真实在涨;第二遍真实降到108.6毫秒,快了约29%——热索引真的要跑热才有效果。

MySQL InnoDB 真实验证 动画演示
MySQL / InnoDB 2026-09-28

Redo Log Checkpoint

本机对着SHOW ENGINE INNODB STATUS的LOG部分每0.4秒轮询一次,一边跑全表更新:真实看到Log sequence number先跑到checkpoint前面,几轮之后checkpoint真实追了上来,两个数字又重新相等。

MySQL InnoDB 真实验证 动画演示
MySQL / InnoDB 2026-09-28

Doublewrite Buffer

本机磁盘上真实存在两个doublewrite文件;运行至今真实已经写过475个页面、分成43批;本文又真实跑了一次写入,计数器真实多了1页1批——doublewrite真实把多个脏页打包成一批一起写入。

MySQL InnoDB 真实验证 动画演示
MySQL / InnoDB 2026-09-28

Crash Recovery

本文真实在本机另起了一个一次性的MySQL实例,写入3条真实提交的数据,开一个事务插入第4条但不提交,真实kill -9模拟崩溃。重启后3条已提交数据全部真实还在,第4条未提交的真实消失了。

MySQL InnoDB 真实验证 动画演示
MySQL / InnoDB 2026-09-28

Page Compression

本机用同样100行高重复度文本,一张表ROW_FORMAT=COMPRESSED,一张表DYNAMIC不压缩:磁盘上真实的.ibd文件,压缩表172032字节,不压缩表393216字节——真实压缩比约2.28倍。

MySQL InnoDB 真实验证 动画演示
MySQL / InnoDB 2026-09-28

表空间与独立表空间

本机innodb_file_per_table真实是开着的:独立表空间的表DROP之后.ibd文件真实立刻从磁盘消失;共享表空间(ibdata1)的表,DROP之后共享文件真实一个字节都没有缩小。

MySQL InnoDB 真实验证 动画演示
MySQL / InnoDB 2026-09-28

簇索引页分裂

本机插入同样1000行数据,主键顺序插入真实触发14次页分裂;打乱顺序插入真实多触发19次——磁盘文件也真实证明:顺序插入344064字节,乱序插入425984字节,多花了约24%空间。

MySQL InnoDB 真实验证 动画演示
MySQL / InnoDB 2026-09-28

B+Tree 页合并

本机删掉表里70%的行之后,真实立刻查page merge计数器还是0;紧接着一条完全不命中数据的DELETE,真实触发了146次合并尝试、10次成功——页合并是被后续遍历顺带触发的。

MySQL InnoDB 真实验证 动画演示
MySQL / InnoDB 2026-09-28

OPTIMIZE TABLE 到底做了什么

本机对一张删了700行的表跑OPTIMIZE TABLE,MySQL真实提示会recreate加analyze。真实的效果也明显:文件从360448字节真实降到196608字节,缩了约45%。

MySQL InnoDB 真实验证 动画演示
MySQL / InnoDB 2026-09-28

表碎片和空间回收

本机删掉一张表一半的行,文件大小真实一个字节都没变,DATA_FREE字段全程真实都是0——真正能看出碎片的,只有OPTIMIZE TABLE前后真实的文件大小对比(缩小约28.6%)。

MySQL InnoDB 真实验证 动画演示
MySQL / InnoDB 2026-09-28

隐式类型转换导致索引失效

本机对索引列用字符串字面量真实走Index lookup,cost=0.35;用数字字面量(隐式转换)真实降级为Index scan加Filter,cost=101,扫描了全部1003行。

MySQL InnoDB 真实验证 动画演示
MySQL / InnoDB 2026-09-28

字符集与排序规则

本机建了两张字符集相同、排序规则不同的表:ci规则下同一条查询真实同时命中3行;bin规则下真实只命中1行。给ci列加唯一索引,真实立刻报Duplicate entry。

MySQL InnoDB 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号