Documentation Home
MySQL 8.3 Reference Manual
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

17.21 InnoDB 限制

本节描述了 InnoDB 表、索引、表空间和 InnoDB 存储引擎的其他方面的限制。

  • 一个表最多可以包含 1017 列。虚拟生成的列也包括在这个限制中。

  • 一个表最多可以包含 64 个 次索引

  • 索引键前缀长度限制为 3072 字节,对于使用 DYNAMICCOMPRESSED 行格式的 InnoDB 表。

    索引键前缀长度限制为 767 字节,对于使用 REDUNDANTCOMPACT 行格式的 InnoDB 表。例如,在 TEXTVARCHAR 列上使用超过 191 个字符的列前缀索引,假设使用 utf8mb4 字符集,每个字符最多 4 字节。

    尝试使用超过限制的索引键前缀长度将返回错误。

    如果您将 InnoDB页大小 降低到 8KB 或 4KB,通过指定 innodb_page_size 选项时创建 MySQL 实例,那么索引键的最大长度将相应降低,基于 16KB 页大小的 3072 字节限制。

    索引键前缀的限制也适用于完整的列索引键。

  • 多列索引最多允许 16 列。超过限制将返回错误。

    ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed
  • 排除存储在页外的变长列之外的最大行大小,略小于 4KB、8KB、16KB 和 32KB 页大小的一半。例如,对于默认的 innodb_page_size 16KB,最大行大小约为 8000 字节。然而,对于 64KB 的 InnoDB 页大小,最大行大小约为 16000 字节。LONGBLOBLONGTEXT 列必须小于 4GB,包括 BLOBTEXT 列的总大小必须小于 4GB。

    如果一行小于半页长,全都存储在页内。如果超过半页长,变长列将被选择用于外部离页存储,直到行适合半页,如 Section 17.11.2, “File Space Management” 中所述。

  • 尽管 InnoDB 支持内部行大小超过 65,535 字节,但 MySQL 本身对所有列的组合大小施加了 65,535 字节的限制。见 Section 10.4.7, “Limits on Table Column Count and Row Size”

  • 在一些较旧的操作系统上,文件必须小于 2GB。这不是 InnoDB 的限制。如果您需要一个大型系统表空间,请使用多个较小的数据文件而不是一个大型数据文件,或者将表数据分布在每个表文件和通用表空间数据文件中。

  • InnoDB 日志文件的组合最大大小为 512GB。

  • 最小表空间大小略大于 10MB。最大表空间大小取决于 InnoDB 页大小。

    表 17.27 InnoDB 最大表空间大小

    InnoDB Page Size Maximum Tablespace Size
    4KB 16TB
    8KB 32TB
    16KB 64TB
    32KB 128TB
    64KB 256TB

    最大表空间大小也是最大表大小。

  • 一个 InnoDB 实例支持高达 2^32 (4294967296) 个表空间,其中少数表空间保留用于撤销和临时表。

  • 共享表空间支持高达 2^32 (4294967296) 张表。

  • 表空间文件的路径,包括文件名,在 Windows 上不能超过 MAX_PATH 限制。在 Windows 10 之前,MAX_PATH 限制为 260 个字符。从 Windows 10 版本 1607 开始,MAX_PATH 限制从常见的 Win32 文件和目录函数中移除,但您必须启用新行为。

  • 有关并发读写事务的限制,请参阅 第 17.6.6 节,“撤销日志”