MySQL InnoDB限制
创始人
2025-05-29 21:44:40

MySQL InnoDB限制

以下限制基于MySQL 8.0.x

1.表与索引限制

  1. 单表只能有1017个列
  2. 单表最多有64个二级索引
  3. 在使用DYNAMIC或COMPRESSED row format时索引前缀长度最大为3072个字节
  4. 一个组合索引的最大列数为16
    如果超过了16个列会会报错:
ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed

2. 行大小限制

  1. 最大行大小略微小于页面的一半
    例如:InnoDB的默认innodb_page_size是16KB,那么行大小在8000字节左右。但是对于InnoDB页面大小在64KB时,最大行大小在16000字节左右。对于包含LongBLOB和LONGTEXT类型的列最大行大小不应该超过4GB,对于BLOB和TEXT类型的列,最大行大小不应该超过4GB。
  2. MySQL强制一行中所有列的数据大小不能超过65535个字节,尽管InnoDB支持的最大行大小超过了65535个字节(不包括变长列,因为变长列会分页存储)。

3.表空间与日志限制

  1. 在一些老的操作系统中,单个文件的大小不能超过2GB,那么这个会限制InnoDB的文件空间。在这些操作系统上,可以配置file-per-table为1让每张表有自己的表空间。
  2. InnoDB日志文件的最大组合大小为512GB。
  3. 表空间最小在10MB左右。最大的表空间依赖于InnoDB 页面大小配置。
  4. InnoDB最大支持2^32个表空间。
  5. 共享表空间最大支持2^32个表。
  6. 表空间文件路径加文件名在Windows上不能超过MAX_PATH定义的最大长度。在Windows10以前,MAX_PATH定义的长度是260个字符。在Windows10的1607版本中 ,普通Win32文件和目录函数的MAX_PATH限制被移除。
InnoDB页面大小最大表空间大小
4KB16TB
8KB32TB
16KB64TB
32KB128TB
64KB256TB

3.1 为什么有这个限制?

因为InnoDB表空间的基本单位是页面,每个页面有一个页号,这个页号也称为页偏移;页号是一个32位的整数,所以一个表空间最多有2的32次方个页面,将页面个数乘以页面大小就是这个表空间的最大大小,例如:页面大小为16KB也是2的14次方,那么64TB= 16KB * 2^32,其他的依次替换页面大小即可。

参考

  1. https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html
  2. https://blog.jcole.us/2013/01/03/the-basics-of-innodb-space-file-layout/

相关内容

热门资讯

Anthropic发布Clau... Anthropic推出AI代码扫描工具引发行业忧虑,网络安全股集体重挫。2月20日,Anthropi...
最高法院裁决并未“击溃”关税,... 美国最高法院的裁决并不意味着该国总统特朗普处心积虑构建的关税壁垒就此“击溃”,他还可能凭借手头的多种...
智谱7天暴涨250%,徐新爆赚... 马年首个交易日,有“全球大模型第一股”之称的智谱强势不改,表现更超节前,收涨超42%,市值突破320...
特朗普全球关税被推翻!美国最高... 美国总统特朗普遭遇他第二个任期内最大的法庭败绩,他的核心政策工具被最高法院裁定违法。据央视新闻,当地...
消费回暖!公募两大方式提前布局... 马年春节来临之际,低迷久日的消费板块,迎来小幅回暖。以泡泡玛特和老铺黄金为首的新消费,和以贵州茅台为...