静态格式是 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,因为标志存储在动态行头中。