InnoDB限制和局限
本节描述InnoDB
表,索引,表空间和InnoDB
存储引擎其他方面的限制。
- 一个表最多可以包含1017列。虚拟生成的列包含在此限制中。
- 一个表最多可以包含64个二级索引。
对于
InnoDB
使用表DYNAMIC
或COMPRESSED
行格式的表,索引键前缀长度限制为3072字节。对于
InnoDB
使用REDUNDANT
或COMPACT
行格式的表,索引键前缀长度限制为767个字节。例如,假设一个字符集并且每个字符最多4个字节,则您可能在a 或 column列上使用超过191个字符的列前缀索引来达到此限制。TEXT
VARCHAR
utf8mb4
尝试使用超出限制的索引键前缀长度会返回错误。
如果在创建MySQL实例时通过指定选项将
InnoDB
页面大小减小到8KB或4KBinnodb_page_size
,则基于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。如果一行的长度少于一页的一半,则所有行都将存储在本地页面内。如果超过一页的一半,则如“文件空间管理”中所述,选择可变长度列用于外部页外存储,直到该行适合半页。
- 尽管
InnoDB
内部支持大于65,535字节的行大小,但是MySQL本身对所有列的组合大小强加了65,535的行大小限制。请参见“数据表的限制”。 - 在某些较旧的操作系统上,文件必须小于2GB。这不是
InnoDB
限制。如果需要大型系统表空间,请使用几个较小的数据文件(而不是一个大型数据文件)对其进行配置,或者在每个表文件和常规表空间数据文件之间分配表数据。 InnoDB
日志文件的最大总大小为512GB。最小表空间大小略大于10MB。最大表空间大小取决于
InnoDB
页面大小。InnoDB最大表空间大小
InnoDB页面大小 最大表空间大小 4KB 16TB 8KB 32TB 16KB 64TB 32KB 128TB 64KB 256TB 最大表空间大小也是表的最大大小。
- 表空间文件的路径(包括文件名)不能超过
MAX_PATH
Windows 的限制。在Windows 10之前,MAX_PATH
限制为260个字符。从Windows 10版本1607开始,MAX_PATH
已从常见Win32文件和目录功能中删除了限制,但必须启用新行为。 - 有关与并发读写事务关联的限制,请参见“撤消日志”。
InnoDB的限制和限制
本节描述了InnoDB
存储引擎的限制和局限性。
你不能创建一个表与一个内部的名称相匹配的列名
InnoDB
列(其中包括DB_ROW_ID
,DB_TRX_ID
,和DB_ROLL_PTR
。此限制适用于任何大小写使用的名称。mysql>
CREATE TABLE t1 (c1 INT, db_row_id INT)ENGINE =INNODB; ERROR 1166 (42000): Incorrect column name 'db_row_id'SHOW TABLE STATUS
InnoDB
除了表保留的物理大小外,不提供表的准确统计信息。行数只是SQL优化中使用的粗略估计。InnoDB
不会在表中保留内部行数,因为并发事务可能同时“看到”不同数量的行。因此,SELECT COUNT(*)
语句仅对当前事务可见的行进行计数。有关信息如何
InnoDB
处理SELECT COUNT(*)
报表,请参阅COUNT()
在描述第12.20.1,“集合(GROUP BY)功能说明”。ROW_FORMAT=COMPRESSED
页面大小大于16KB不受支持。- 使用特定
InnoDB
页面大小(innodb_page_size
)的MySQL实例不能使用来自使用不同页面大小的实例的数据文件或日志文件。 - 有关与使用可移植表空间功能导入表相关的限制,请参阅表导入限制。
- 有关与在线DDL相关的限制,请参见“在线DDL限制”。
- 有关与常规表空间相关的限制,请参见常规表空间限制。
- 有关静态数据加密的限制,请参阅加密限制。