15.2.3.1 静态(定长)表特征

静态格式是MyISAM 表的默认格式。当表不包含可变长度列(VARCHARVARBINARYBLOBTEXT)时使用它。每行都使用固定数量的字节存储。

在三种MyISAM存储格式中,静态格式是最简单和最安全的(最不容易损坏)。它也是最快的磁盘格式,因为可以轻松地在磁盘上找到数据文件中的行:要根据索引中的行号查找行,请将行号乘以行长度计算行位置。此外,在扫描表时,很容易在每次磁盘读取操作中读取固定数量的行。

如果您的计算机在 MySQL 服务器写入固定格式 MyISAM文件时崩溃,则安全性得到证明。在这种情况下, myisamchk可以很容易地确定每一行的开始和结束位置,因此它通常可以回收除部分写入的行之外的所有行。MyISAM表索引总是可以根据数据行重建。

笔记

固定长度行格式仅适用于没有 BLOBTEXT列的表格。使用带有显式 ROW_FORMAT子句的这些列创建表不会引发错误或警告;忽略格式规范。

静态格式表具有以下特征:

  • CHARVARCHAR列被空格填充到指定的列宽,尽管列类型没有改变。 BINARY并且 VARBINARY列用0x00字节填充到列宽。

  • NULL列需要行中的额外空间来记录它们的值是否为 NULL. 每NULL列额外占用一位,四舍五入到最接近的字节。

  • 很快。

  • 易于缓存。

  • 崩溃后易于重建,因为行位于固定位置。

  • 除非删除大量行并希望将可用磁盘空间返回给操作系统,否则不需要重组。为此,请使用 OPTIMIZE TABLEmyisamchk -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,因为该标志存储在动态行标题中。