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


17.21 InnoDB 限制

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

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

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

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

    索引关键字前缀长度限制为767字节,对使用REDUNDANTCOMPACT行格式的InnoDB表。例如,您可能会遇到这个限制与一个列前缀索引,索引长度超过191个字符,在一个TEXTVARCHAR列上,对于一个使用utf8mb4字符集的表,并且每个字符最多占用4字节。

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

    如果将InnoDB页面大小减少到8KB或4KB,通过在创建MySQL实例时指定innodb_page_size选项,可以降低索引键的最大长度。根据16KB页面大小的限制,即使页面大小为8KB或4KB,索引键的最大长度也将相应下降。

    对索引键前缀的限制同样适用于全列索引键。

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

    ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed
  • 除去存储在off-page中的可变长度列外,行大小的最大值约为4KB、8KB、16KB和32KB页面大小的一半。例如,默认innodb_page_size为16KB时,行大小的最大值约为8000字节。但是,对于64KB的InnoDB页面大小,行大小的最大值约为16000字节。LONGBLOBLONGTEXT列必须小于4GB,包括BLOBTEXT列的总行大小也必须小于4GB。

    如果行长小于半页长,则将其全部存储在页面中。如果超过半页长,变长列将被选择用于外部页面存储,直到行长适应半页长,如第17.11.2节,“文件空间管理”中所述。

  • 虽然InnoDB支持行长大于65,535字节的内部存储,但MySQL本身对所有列的总大小施加了65,535字节的限制。请参见第10.4.7节,“表列计数和行长限制”

  • 服务器的文件系统可以对表或表空间大小施加影响,例如,ext4文件系统在Linux上有最大文件大小为16 TiB,因此表或表空间大小将变为16 TiB,而不是64 TiB。另一个例子是FAT32文件系统,它的最大文件大小为4 GB。

    如果您需要更大的系统表空间,可以使用多个较小的数据文件或将表数据分布在文件-per-表和一般表空间数据文件中。

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

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

    Table 17.26 InnoDB Maximum Tablespace Size

    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节,“Undo Logs”