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