You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL MyISAM全固定长度整型列使用ROW_FORMAT=DYNAMIC体积减小原因问询

MyISAM两种行格式体积差异核心原因

1. ROW_FORMAT=FIXED的存储规则

FIXED行格式下,所有字段无论实际存储值是什么,都严格占用建表时定义的固定长度:

  • 字段值为NULL时,仍需占用对应类型的完整字节(例如INT类型即使为NULL也要占4字节)
  • 字段值为小数值(比如0、1)时,也不会缩减占用的存储空间
    你场景中3GB的大小刚好匹配80万行 × 1600列整型的总固定长度,符合预期。

2. ROW_FORMAT=DYNAMIC的空间优化逻辑

哪怕所有字段都是固定长度的整型,MyISAM的DYNAMIC行格式也会做两项核心的空间优化:

  • NULL值几乎不占空间:DYNAMIC格式仅在行头的NULL位图中用1位标记字段是否为NULL,NULL字段本身不会占用任何额外存储空间。如果你的表中大部分字段都是NULL,这部分的空间节省会非常夸张。
  • 短值动态压缩存储:对于非NULL的整型字段,DYNAMIC格式会根据实际数值的大小动态调整占用的存储空间,不会强制占用字段定义的完整长度。比如你定义了INT类型(占4字节),但实际存储的值是0,仅需要1字节就能存储,DYNAMIC格式会自动用最短的长度存储该值。如果你的表中大部分字段的值都是极小的整数,这部分也能带来数倍的空间节省。

以上两种优化叠加后,就会出现你看到的体积差达到15倍的情况。

内容的提问来源于stack exchange,提问作者guigoz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:45:02