Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Static (Fixed-Length) Table Characteristics

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

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

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

如果您的计算机在 MySQL 服务器写入固定格式 MyISAM 文件时崩溃,在这种情况下,myisamchk 可以轻松地确定每行的起始和结束位置,因此可以通常恢复所有行,除了部分写入的行。MyISAM 表索引总是可以根据数据行重新构建的。

Note

固定长度行格式仅适用于不包含 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,因为标志存储在动态行头中。