文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  InnoDB 存储引擎  /  InnoDB 限制

17.21 InnoDB 限制

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

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

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

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

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

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

    如果通过在创建 MySQL 实例时指定 innodb_page_size 选项将 InnoDB 页大小 减少到 8KB 或 4KB,则索引键的最大长度将根据 16KB 页大小的 3072 字节限制进行比例缩减。也就是说,当页大小为 8KB 时,索引键的最大长度为 1536 字节,当页大小为 4KB 时,索引键的最大长度为 768 字节。

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

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

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

    如果一行小于页的一半长,则该行的所有内容都将存储在页内。如果超过页的一半,则将选择可变长度列进行外部页外存储,直到行的大小在页的一半内,如 第 17.11.2 节,“文件空间管理” 中所述。

  • 虽然 InnoDB 在内部支持大于 65,535 字节的行大小,但 MySQL 本身对所有列的组合大小的行大小限制为 65,535。请参阅 第 10.4.7 节,“表列数和行大小的限制”

  • 最大表或表空间大小受服务器文件系统的限制,文件系统可能施加的最大文件大小小于 InnoDB 定义的内部 64 TiB 大小限制。例如,Linux 上的 ext4 文件系统具有 16 TiB 的最大文件大小,因此最大表或表空间大小变为 16 TiB 而不是 64 TiB。另一个例子是 FAT32 文件系统,它的最大文件大小为 4 GB。

    如果需要更大的系统表空间,请使用多个较小的数据文件而不是一个大的数据文件进行配置,或者将表数据分布在每个表一个表空间和通用表空间数据文件中。

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

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

    表 17.26 InnoDB 最大表空间大小

    InnoDB 页面大小 最大表空间大小
    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 节,“撤销日志”