相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  静态(固定长度)表特性

18.2.3.1 静态(固定长度)表特性

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

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

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

注意

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

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

  • CHARVARCHAR 列使用空格填充到指定的列宽,尽管列类型没有改变。 BINARYVARBINARY 列使用 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,因为该标志存储在动态行标题中。