如何计算 space innodb table 中一行的磁盘使用率 mysql

How to compute the disk space usage of a row in a mysql innodb table

我有一个应用程序在特定的 innodb table 中插入许多行,但我不知道如何计算将来需要的磁盘 space。

那么给定一个 mysql innodb table 结构,我如何计算一行的磁盘 space 成本?

  1. TINYINT 占用 1 个字节,INT:4 个字节,BIGINT:8 个字节,TEXT/BLOB/VARCHAR/VARBINARY:2+ 个 字节的平均数 ,DATETIME 和 TIMESTAMP:5 个字节, CHAR取全长等
  2. 根据 table 中的列将它们相加。
  3. 乘以 3(用于开销、索引、BTree 结构、浪费 space 等)。这将为您提供 InnoDB 行的磁盘 space 的 粗略估计

注意事项:

  • 结果可高可低,但这是一个简单的初步猜测。
  • 一个 table 至少需要 16KB。
  • 过多的二级索引会导致消耗更多space。
  • 大量 TEXTs/BLOBs 会导致可能超出论坛的非记录存储。
  • 在 table 增长期间的某个时刻,分配单元从 16KB 切换到 8MB,从而导致令人不安的大小跳跃。
  • ROW_FORMAT 有所不同。 (但 COMPRESSED 不太可能将 table 缩小超过 2 倍。)
  • 寻找缩小 UUID、IP 地址等的方法,以节省 space。
  • 不要将 utf8 用于 ascii-only CHAR() 字符串(country_code、十六进制等)。