### 8.4.6 表大小限制

[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)

MySQL 数据库的有效最大表大小通常取决于操作系统对文件大小的限制，而不是 MySQL 内部限制。有关操作系统文件大小限制的最新信息，请参阅特定于您的操作系统的文档。

Windows 用户，请注意 FAT 和 VFAT (FAT32) 是*不是*被认为适用于 MySQL 的生产使用。请改用 NTFS。

如果您遇到全表错误，可能有几个原因：

-   磁盘可能已满。

-   您正在使用`InnoDB`桌子已经用完了`InnoDB`表空间文件。最大表空间大小也是表的最大大小。有关表空间大小限制，请参阅[第 15.22 节，“InnoDB 限制”](innodb-limits.html).

    对于大于 1TB 的表，一般建议将表分区为多个表空间文件。

-   您已达到操作系统文件大小限制。例如，您正在使用`MyISAM`操作系统上的表仅支持最大 2GB 的文件，并且您已达到数据文件或索引文件的此限制。

-   您正在使用一个`MyISAM`table 和 table 所需的空间超出了内部指针大小允许的范围。`MyISAM`默认情况下允许数据和索引文件增长到 256TB，但可以将此限制更改为最大允许大小 65,536TB（256<sup>7</sup>− 1 个字节）。

    如果你需要一个`MyISAM`如果表大于默认限制并且您的操作系统支持大文件，则[`创建表`](create-table.html)声明支持`AVG_ROW_LENGTH`和`MAX_ROWS`选项。看[第 13.1.20 节，“CREATE TABLE 语句”](create-table.html).服务器使用这些选项来确定允许的表有多大。

    如果指针大小对于现有表来说太小，您可以更改选项[`更改表`](alter-table.html)增加表的最大允许大小。看[第 13.1.9 节，“ALTER TABLE 语句”](alter-table.html).

    ```
    ALTER TABLE tbl_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;
    ```

    您必须指定`AVG_ROW_LENGTH`仅适用于带有[`斑点`](blob.html)要么[`文本`](blob.html)列;在这种情况下，MySQL 无法仅根据行数优化所需的空间。

    更改默认大小限制`MyISAM`桌子，摆好桌子[`myisam_数据_指针_大小`](server-system-variables.html#sysvar_myisam_data_pointer_size)，它设置用于内部行指针的字节数。如果未指定指针大小，则该值用于设置新表的指针大小`最大排数`选项价值[`myisam_数据_指针_大小`](server-system-variables.html#sysvar_myisam_data_pointer_size)可以是2到7。例如，对于使用动态存储格式的表，值4允许最多4GB的表；值为6时，表的最大容量为256TB。使用固定存储格式的表具有更大的最大数据长度。有关存储格式特征，请参阅[第16.2.3节，“MyISAM表格存储格式”](myisam-table-formats.html).

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

    ```
    SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';
    ```

    你也可以使用[**myisamchk-dv/path/to/table索引文件**](myisamchk.html)看见[第13.7.7节“展示声明”](show.html)或[第4.6.4节，“myisamchk-MyISAM表维护实用程序”](myisamchk.html).

    解决文件大小限制的其他方法`米萨姆`表格如下：

    -   如果您的大表是只读的，则可以使用[**myisampack**](myisampack.html)来压缩它。[**myisampack**](myisampack.html)通常会将一张桌子压缩至少50%，所以实际上你可以拥有更大的桌子。[**myisampack**](myisampack.html)还可以将多个表合并到一个表中。看见[第4.6.6节，“myisampack-生成压缩的只读MyISAM表”](myisampack.html).

    -   MySQL包含一个`合并`使您能够处理`米萨姆`与单个表具有相同结构的表`合并`桌子看见[第16.7节，“合并存储引擎”](merge-storage-engine.html).

-   你正在使用`记忆力` (`堆`)存储引擎；在这种情况下，需要增加[`最大堆大小表大小`](server-system-variables.html#sysvar_max_heap_table_size)系统变量。看见[第5.1.8节“服务器系统变量”](server-system-variables.html).
