Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 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 列需要一个额外的字节来记录其值是否为 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为静态行格式表的标记。静态表使用行记录中的位来表示行是否已删除。delete_flag为动态表为0,因为标记存储在动态行头中。