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