8.4.6 table 格大小限制

MySQL 数据库的有效最大 table 大小通常由 os 对文件大小的限制来确定,而不是由 MySQL 内部限制来确定。有关 os 文件大小限制的最新信息,请参阅特定于您的 os 的文档。

Windows 用户,请注意 FAT 和 VFAT(FAT32)被认为不适合与 MySQL 一起用于生产。请改用 NTFS。

如果遇到全 table 错误,则可能由于多种原因导致它发生:

  • 磁盘可能已满。

  • 您正在使用InnoDBtable,并且InnoDBtable 空间文件中的空间已用完。最大 table 空间大小也是 table 的最大大小。有关 table 空间大小的限制,请参见第 14.23 节“ InnoDB 限制”

通常,对于大于 1TB 的 table,建议将 table 划分为多个 table 空间文件。

  • 您已达到 os 文件大小限制。例如,您正在 os 上使用MyISAMtable,该 table 仅支持最大 2GB 的文件,而数据文件或索引文件已达到此限制。

  • 您正在使用MyISAMtable,并且该 table 所需的空间超出了内部指针大小所允许的空间。 MyISAM允许数据和索引文件默认增加到 256TB,但此限制可以更改为最大允许大小 65,536TB(2567-1 字节)。

如果需要的MyISAMtable 大于默认限制,并且您的 os 支持大文件,则CREATE TABLE语句支持AVG_ROW_LENGTHMAX_ROWS选项。参见第 13.1.18 节“ CREATE TABLE 语句”。服务器使用这些选项来确定允许多大的 table。

如果指针大小对于现有 table 而言太小,则可以使用ALTER TABLE更改选项以增加 table 的最大允许大小。参见第 13.1.8 节“ ALTER TABLE 语句”

ALTER TABLE tbl_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;

您只需要为具有BLOBTEXT列的 table 指定AVG_ROW_LENGTH;在这种情况下,MySQL 无法仅根据行数来优化所需的空间。

要更改MyISAMtable 的默认大小限制,请设置myisam_data_pointer_size,该值设置用于内部行指针的字节数。如果您未指定MAX_ROWS选项,则该值用于设置新 table 的指针大小。 myisam_data_pointer_size的值可以是 2 到 7.4 的值允许最大 4GB 的 table。值 6 允许最大 256TB 的 table。

您可以使用以下语句检查最大数据和索引大小:

SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';

您也可以使用myisamchk -dv/path/to/table-index-file。参见第 13.7.5 节“ SHOW 语句”第 4.6.3 节“ myisamchk-MyISAMtable 维护 Util”

解决MyISAM个 table 的文件大小限制的其他方法如下: