type
status
date
slug
summary
tags
category
icon
password
本文主要介绍下 InnoDB引擎中的一些最值。其中包含 InnoDB 表、索引、表空间和其他方面的最值限制。
整理定义
InnoDB Limits(InnoDB中的最值)
没有明确的行业含义,主要是对InnoDB引擎中的各个方面的值的限制进行整理和归纳说明。
复述展开
表限制
- 一个表最多可以包含1017列,包括虚拟生成列在内。
- 一个表最多可以包含64个二级索引。
索引限制
- 对于使用
DYNAMIC
或COMPRESSED
行格式的InnoDB表,索引键前缀长度限制为3072字节。 - 尝试使用超过限制的索引键前缀长度会返回错误。
- 如果在创建MySQL实例时通过指定
innodb_page_size
选项将InnoDB页面大小减少到8KB或4KB,最大索引键长度会按比例降低,基于16KB页面大小的3072字节限制。即页面大小为8KB时,最大索引键长度为1536字节;页面大小为4KB时,为768字节。 - 适用于索引键前缀的限制也适用于完整列索引键。
对于使用
REDUNDANT
或COMPACT
行格式的InnoDB表,索引键前缀长度限制为767字节。例如,如果使用utf8mb4字符集,一个TEXT或VARCHAR列的列前缀索引超过191个字符可能会触发这个限制,因为每个字符最多使用4个字节。注意事项
- 多列索引最多允许16列。超过限制会返回错误。
行限制
- 对于 4KB、8KB、16KB 和 32KB 页面大小,最大行大小(不包括存储在页外的任何可变长度列)略小于页面的一半。 例如,默认 innodb_page_size 16KB 的最大行大小约为 8000 字节。 但是,对于 64KB 的 InnoDB 页大小,最大行大小约为 16000 字节。 LONGBLOB 和 LONGTEXT 列必须小于 4GB,并且总行大小(包括 BLOB 和 TEXT 列)必须小于 4GB。
如果一行的长度小于半个页面,那么它的全部内容都会存储在页面内。如果超过半个页面,那么会选择可变长度的列进行外部存储,直到行的大小适合半个页面为止。
- 虽然InnoDB内部支持大于65535字节的行大小,但MySQL本身对所有列的组合大小施加了65535字节的行大小限制。
文件限制
- 在一些较旧的操作系统上,文件必须小于2GB。这不是InnoDB的限制。如果你需要一个大型的系统表空间,请使用几个较小的数据文件而不是一个大型数据文件进行配置,或者将表数据分布在每个表的文件和通用表空间数据文件中。
- InnoDB日志文件的组合最大为512GB。
表空间限制
- 最小表空间的容量略大于10MB。最大表空间的容量取决于InnoDB页面的大小。
最大表空间的容量也是单个表的最大容量。
InnoDB Page Size | Maximum Tablespace Size |
4KB | 16TB |
8KB | 32TB |
16KB | 64TB |
32KB | 128TB |
64KB | 256TB |
- 一个 InnoDB 实例最多支持 (4294967296) 个表空间,其中少量表空间保留用于撤消表和临时表。
- 共享表空间最多支持 (4294967296) 个表。
- 表空间文件的路径(包括文件名)不能超过 Windows 上的 MAX_PATH 限制。 在 Windows 10 之前,MAX_PATH 限制为 260 个字符。 从 Windows 10 版本1607 开始,常见 Win32 文件和目录函数中删除了 MAX_PATH 限制,但必须启用新行为。
理解体会
本章整理了下InnoDB引擎的表、索引、文件、行、表空间的限制值,作为平时使用时稍加注意。
这些限制是由InnoDB的内部结构和MySQL数据库的设计决定的。了解这些限制对于数据库架构设计和性能优化至关重要。
最后整理了一个表格,用于快速记录:
类别 | 限制项 | 最值/限制描述 |
表 | 列的最大数量 | 最多1017列,包括虚拟生成列。 |
表 | 行的最大大小 | 约为页面大小的一半,16KB页面为8000字节,64KB页面为16000字节。LONGBLOB/LONGTEXT < 4GB。 |
索引 | 辅助索引的最大数量 | 最多64个。 |
索引 | 索引键前缀长度限制(DYNAMIC/COMPRESSED) | 最大3072字节。 |
索引 | 索引键前缀长度限制(REDUNDANT/COMPACT) | 最大767字节。 |
索引 | 多列索引的列数限制 | 最多16列。 |
表空间 | 最小表空间大小 | 略大于10MB。 |
表空间 | 最大表空间大小 | 取决于页面大小,16KB页面为256TB。 |
表空间 | 一个InnoDB实例容纳表空间数量 | (4294967296)个表空间 |
日志文件 | InnoDB日志文件的最大大小 | 总最大512GB。 |
操作系统 | 文件大小限制 | 在一些旧操作系统上,文件必须小于2GB。 |
MySQL限制 | MySQL行大小限制 | 所有列的组合大小限制为65,535字节。 |
- 作者:eachenkuang
- 链接:https://kuangyichen.com/article/industry-day91
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。