14.23 InnoDB 限制
本节描述InnoDB
table,索引,table 空间和InnoDB
存储引擎的其他方面的限制。
-
一个 table 最多可以包含 1017 列(在 MySQL 5.6.9 中从 1000 的限制中提高)。虚拟生成的列包含在此限制中。
-
一个 table 最多可以包含 64 个secondary indexes。
-
如果启用了innodb_large_prefix(默认设置),则使用
DYNAMIC
或COMPRESSED
行格式的InnoDB
table 的索引键前缀限制为 3072 字节。如果禁用innodb_large_prefix,则任何行格式的 table 的索引关键字前缀限制为 767 个字节。
innodb_large_prefix已过时,将在以后的版本中删除。 MySQL 5.5 中引入了innodb_large_prefix,以禁用大索引键前缀,以与不支持大索引键前缀的InnoDB
的早期版本兼容。
对于使用REDUNDANT
或COMPACT
行格式的InnoDB
个 table,索引键前缀长度限制为 767 个字节。例如,假设utf8mb3
字符集且每个字符最多 3 个字节,则您可能会在TEXT
或VARCHAR
列上使用超过 255 个字符的column prefix索引来达到此限制。
尝试使用超出限制的索引键前缀长度将返回错误。为避免复制配置中出现此类错误,如果无法同时在副本上启用innodb_large_prefix,则避免在源上启用innodb_large_prefix。
如果在创建 MySQL 实例时通过指定innodb_page_size选项将InnoDB
page size减小为 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 字节。 LONGBLOB和LONGTEXT列必须小于 4GB,包括BLOB和TEXT列在内的总行大小必须小于 4GB。
如果一行的长度小于一页的一半,则所有行都将存储在本地页面内。如果它超过一页的一半,则将选择可变长度的列用于外部页外存储,直到该行适合在一页的一半之内,如第 14.12.2 节“文件空间 Management”中所述。
-
尽管
InnoDB
内部支持大于 65,535 字节的行大小,但是 MySQL 本身对所有列的合并大小强加了 65,535 的行大小限制。参见第 8.4.7 节“table 列数和行大小的限制”。 -
在某些较旧的 os 上,文件必须小于 2GB。这不是
InnoDB
的限制。如果需要大型系统 table 空间,请使用几个较小的数据文件(而不是一个大型数据文件)进行配置,或者在每个 table 文件和常规 table 空间数据文件之间分配 table 数据。 -
InnoDB
个日志文件的总最大大小为 512GB。 -
最小 table 空间大小略大于 10MB。最大 table 空间大小取决于
InnoDB
页的大小。
table14.25 InnoDB 最大 table 空间大小
InnoDB 页面大小 | 最大 table 空间大小 |
---|---|
4KB | 16TB |
8KB | 32TB |
16KB | 64TB |
32KB | 128TB |
64KB | 256TB |
最大 table 空间大小也是 table 的最大大小。
-
在 Windows 32 位系统上,table 空间文件不能超过 4GB(错误#80149)。
-
table 空间文件的路径(包括文件名)不能超过 Windows 上的
MAX_PATH
限制。在 Windows 10 之前的版本,MAX_PATH
限制为 260 个字符。从 Windows 10 版本 1607 开始,MAX_PATH
限制已从常见的 Win32 文件和目录功能中删除,但是您必须启用新行为。 -
Barracuda文件格式的
ROW_FORMAT=COMPRESSED
假定页面大小最大为 16KB,并使用 14 位指针。 -
有关与并发读写事务关联的限制,请参见第 14.6.7 节“撤消日志”。