MySQL 2022年08月20日
0 收藏 20 点赞 6,069 浏览 1423 个字
摘要 :

此文主要介绍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页面大小。

 
InnoDB Page Size
Maximum Tablespace Size
4KB
16TB
8KB
32TB
16KB
64TB
32KB
128TB
64KB
256TB
 
备注:在Windows 32位系统上,表空间文件不能超过4GB(bug#80149)
 
总结一下:
  • 单个表支持的最大列为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字节)。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:http://dbmeta.com/mysql-innodb-limits/

上一篇:

已经没有上一篇了!

下一篇:

已经没有下一篇了!

相关推荐
原创
MYSQL INNODB引擎内部限制
此文主要介绍innodb存储引擎的表、索引、表空间设计的一些约束和限制。 单个表(table)里最大可以支持1017列(column),虚拟…
日期:2022-08-20 点赞:20 阅读:6,069
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

扫描二维码

关注微信公众号