静态格式是 MyISAM
表的默认格式。当表不包含可变长度列(VARCHAR
、VARBINARY
、BLOB
或 TEXT
)时使用。每行使用固定数量的字节存储。
在三种 MyISAM
存储格式中,静态格式是最简单、最安全的(最不容易损坏)。它也是磁盘格式中最快的,因为在磁盘上查找数据文件中的行非常容易:要根据索引中的行号查找行,请将行号乘以行长度以计算行位置。此外,在扫描表时,很容易在每次磁盘读取操作中读取恒定的行数。
当 MySQL 服务器正在写入固定格式的 MyISAM
文件时,如果您的计算机崩溃,则可以证明安全性。在这种情况下,myisamchk 可以很容易地确定每行从哪里开始和结束,因此通常可以回收除部分写入的行以外的所有行。 MyISAM
表索引始终可以根据数据行重建。
静态格式表具有以下特征
CHAR
和VARCHAR
列将用空格填充到指定的列宽度,尽管列类型不会更改。BINARY
和VARBINARY
列将用0x00
字节填充到列宽度。NULL
列在行中需要额外的空间来记录它们的值是否为NULL
。每个NULL
列需要一个额外的位,向上舍入到最接近的字节。非常快。
易于缓存。
崩溃后易于重建,因为行位于固定位置。
除非您删除大量行并希望将空闲磁盘空间返还给操作系统,否则无需重新组织。为此,请使用
OPTIMIZE TABLE
或 myisamchk -r.通常需要比动态格式表更多的磁盘空间。
静态大小行的预期字节数使用以下表达式计算
row length = 1 + (sum of column lengths) + (number of NULL columns + delete_flag + 7)/8 + (number of variable-length columns)
delete_flag
对于具有静态行格式的表为 1。静态表在行记录中使用一个位作为标志,指示该行是否已被删除。delete_flag
对于动态表为 0,因为该标志存储在动态行标头中。