此文主要介绍innodb存储引擎的表、索引、表空间设计的一些约束和限制。 单个表(table)里最大可以支持1017列(column),虚拟列也包含在里面(在MySQL5.6.9之前只能最多……
此文主要介绍innodb存储引擎的表、索引、表空间设计的一些约束和限制。
单个表(table)里最大可以支持1017列(column),虚拟列也包含在里面(在MySQL5.6.9之前只能最多包含1000列,5.6.9以后可以支持1017列)。
单个表(table)可以最大可以支持64个非聚集索引(secondary indexes)。
多列组合索引中最大可以支持16个列,如果超出这个限制,会返回如下错误:
ERROR 1070 (42000): Too many key partsspecified; max 16 parts allowed
单行记录(row size)的最大限制,都是略小于4KB, 8KB, 16KB, and 32KB页大小(page sizes)的一半,这个限制在计算时会排出掉可变长度列,因为可变长度列存储在离线页(off-page)。例如,innodb_page_size默认设置大小为16K的时候,单行记录最多可以存储大约 8000字节(略小于8K),但是当innodb_page_size设置为64K的时候,单行记录最多可以存储的数据大约 16000字节(略小于16K),也就是说无论innodb_page_size设置多大,单行数据存储的最大数据量只能到16K。另外,对于LONGBLOB和LONGTEXT列,单列大小的上限为4GB,并且包括BLOB和TEXT列在内的总行大小必须小于4GB。
如果行数据的大小没有超过单行的上限,也就是说数据大小没有超过page size的一半,那么当前整行的数据存储在当前页(local page),如果超过了一半,那么会将其中的可变长度的列超过限制的数据存储在离线页(off page)。
尽管InnoDB内部支持大于65,535字节的行大小,但是MySQL本身对所有列的总大小强加了65,535的行字节大小限制。
InnoDB日志文件(innodb log files)的最大总大小为512GB。
最小表空间大小略大于10MB。最大表空间大小取决于InnoDB页面大小。
|
|
|
|
|
|
|
|
|
|
|
|
- 单个表支持的最大列为1017列(5.6.9之前只支持1000列)
- 单个表最大可以建64个非聚集索引。
- 每个组合索引包含的列上限为16。
- 单行数据记录的最大限制大概是page size的一半,例如innodb page size 为16K,则单行记录最大限制为略小于8K(不包含可变长度列、LONGBLOB和LONGTEXT)。
- 无论innodb_page_size设置多大,单行数据存储的最大数据量只能到16K(不包含可变长度列、LONGBLOB和LONGTEXT)。
- 如果行数据的大小没有超过单行的上限,那么当前整行的数据存储在当前页(local page),如果超过了一半,那么会将其中的可变长度的列超过限制的数据存储在离线页(off page)。
- 对于LONGBLOB和LONGTEXT列,不存储在当前页(local page),单列大小的上限为4GB,并且包括BLOB和TEXT列在内的总行大小必须小于4GB。
- MySQL 单行所有列长度最大限制为65535字节(utf8编码每个字符占3字节,utf8mb4编码每个字符占4字节)。
还没有评论呢,快来抢沙发~