9

MySQL之最大和最小

 3 years ago
source link: https://www.jianshu.com/p/c0602fd5d733
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
2021.03.10 06:00:08字数 771阅读 32

MySQL之最大和最小

  1. 一个表里最多可有1017列(在MySQL 5.6.9 之前最大支持1000列)。虚拟列也受限这个限制。

  2. 一个表最多可以有64个二级索引。

  3. 如果innodb_large_prefix打开,在InnoDB表DYNAMIC或COMPRESSED列格式下,索引前缀最大支持前3072字节;如果不打开的话,在任意列格式下,最多支持前767字节。这个限制既适用于前缀索引也适用于全列索引。

  4. 基于一个16KB的页最多装3072个字节,如果你把InnoDB 的page 大小从8KB降到4KB,索引的长度也相应的降低。也就是说,当页是8KB的时候最大索引长度是1536字节;当页大小是4KB的时候最大索引长度是768字节。

  5. 联合索引最多支持16列,如果超过这个限制就会遇到以下错误:

ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed
  1. 行长度(除去可变长类型:VARBINARY/VARCHAR/BLOB/TEXT),要小于页长(如4KB, 8KB, 16KB, and 32KB)的一半。例如:innodb_page_size 长度是16KB的话,行长不超过8KB;如果innodb_page_size 是64KB的话,行长不超过16KB; LONGBLOB/LONGTEXT/BLOB/TEXT列必须小于4GB,整个行长也必须小于4GB。如果一行小于一页的一半,它可以存在一个page里面。如果超过了页的一半,就会把可变长列放到额外的页存(如果对这个感兴趣的话可以看看,MySQL页管理)。

  2. 虽然InnoDB内部支持行长大于65,535字节,但是MySQL限制了所有列的组合长度(如果对这个感兴趣的话可以看看,表的列大小和行长)。例如:

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

  1. 在一些老操作系统中,文件必须小于2GB。这并非是InnoDB本身的限制,如果你需要大的表空间,就要配置使用几个小的数据文件而不是一个大的数据文件。

  2. InnoDB日志文件组合大小最大可以是512GB。

  3. 最小的表空间是10MB,最大的表空间取决于InnoDB页大小(最大表空间也就是最大表大小)。如下

InnoDB页大小   最大表空间
4KB 16TB
8KB 32TB
16KB    64TB
32KB    128TB
64KB    256TB
  1. 默认InnoDB页大小是16KB,你可以在创建一个实例的时候,修改配置文件里面这个innodb_page_size来提高或降低页大小。在 Barracuda文件格式下,ROW_FORMAT=COMPRESSED最大支持page_size 16KB。除了ROW_FORMAT=COMPRESSED最大page size只能是16KB以外,可以配置page size是32KB或者64KB。当page size是32KB或者64KB的时候,最大记录长度是16KB。当 innodb_page_size=32k时,扩展长度是2MB;当 innodb_page_size=64k时,扩展长度是4MB。一个MySQL实例只能指定1个innodb_page_size,而不能根据数据文件或者日志文件定制这些文件的innodb_page_size。

参考:
https://www.cnblogs.com/sunss/p/6429713.html


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK