InnoDB表的限制

最大值和最小值

  • 一个表最多可以有1017列(MySQL5.6.9之前是现在1000)。这个限制包含了虚拟生成的列。
  • 一个表最多可以有64个二级索引(secondary indexes).
  • 如果启用了 innodb_large_prefix(默认启用),使用动态或者压缩的行格式的表,索引键的前缀限定最大长度为3072 bytes。如果未启用 innodb_large_prefix,则所有的行格式的索引前缀键长度被限制为 767 bytes.

       innodb_large_prefix 是不推荐的并且会在未来的版本中移除,它是在MySQL5.5版本引入用来禁用大索引键前缀,以便于不支         持大索引键前缀的Innodb 早期版本兼容。

      使用  REDUNDANT 或者 COMPACT 行格式的Innodb表的索引键前缀限制为767字节,比如,text或者varchar 列上超过255个字符并且使用了utf8mb3和每个字符占用3个字节的编码,则会超过这个限制。

  试图使用超过键前缀长度的限制将会返回错误,在配置复制时,如果不能在slave上启用 innodb_large_prefix,则应该避免在master上启用这个参数。

      这个索引键前缀限制适用于所有列的索引。

  • 如果你创建MySQL实例的时候通过修改 innodb_page_size参数来减小页的值,索引键的最大长度也按比例降低,对于16Kb的页大小,索引键前缀的最大长度是3072字节,则在 8kb的页大小上,它的值是1536字节,在4kb的页上则是768字节。
  • 多列的符合索引运行的最多的列是16, 超过这个限制会返回错误。
ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed
  • 行的最大长度,不包括变长的字段(varchar,text,blob,varbinary),对于大小为4K,8K,16K和32K的页限制为略小于一页的一半。比如对于默认 innodb_page_size为16kb来说,单行的最大长度大约是8000字节。然而对于64Kb的页,单行的最大长度限制接近16000 bytes。LONGBLOB和 longtext 字段必须小于 4GB,并且行的总长度(包含blob和text字段)必须小于4G. 

       如果一行的长度小于半页,则所有字段存储在页内部,如果超过半页,变长的字段会存储在外部页,直到行的长度适应小于半页长度。

  • 尽管Innodb 内部支持行大小超过65535 字节,但是MySQL限制了行的大小最长为65535字节。
mysql> CREATE TABLE t (a VARCHAR(8000), b VARCHAR(10000),
    -> c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),
    -> f VARCHAR(10000), g VARCHAR(10000)) ENGINE=InnoDB;
ERROR 1118 (42000): Row size too large. The maximum row size for the
used table type, not counting BLOBs, is 65535. You have to change some
columns to TEXT or BLOBs
  • 在一些老的操作系统中,文件必须小于2G, 这不是MySQL的限制。但是如果你需要一个大的表空间可以通过配置多个较小的问题而不是一个大文件。
  • Innodb日志文件的合并大小可以达到 512GB.
  • 最小表空间大小略大于10M,表空间的最大限制取决于页大小。
Innodb_page_size最大表空间大小
4KB16TB
8KB32TB
16KB64TB
32KB128TB
64KB256TB

       最大表空间大小也是表的最大大小。

  • 在Windows 32位的系统上,表空间文件最大不能超过4GB.
  • 在Windows系统上,表空间文件的路径(包括文件名)不能查过最大长度限制。在Windows10之前,这个路径最大长度限制是260个字符。在Windows10 1607版本后移除了这个限制,但是你需要启动这个功能。
  • Innodb默认的页大小为16Kb, 可以通过 innodb_page_size 参数来修改。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值