• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • InnoDB限制和局限

    本节描述InnoDB表,索引,表空间和InnoDB存储引擎其他方面的限制。

    • 一个表最多可以包含1017列。虚拟生成的列包含在此限制中。
    • 一个表最多可以包含64个二级索引。
    • 对于InnoDB使用表DYNAMICCOMPRESSED行格式的表,索引键前缀长度限制为3072字节。

      对于InnoDB使用REDUNDANTCOMPACT行格式的表,索引键前缀长度限制为767个字节。例如,假设一个字符集并且每个字符最多4个字节,则您可能在a 或 column列上使用超过191个字符的列前缀索引来达到此限制。TEXTVARCHARutf8mb4

      尝试使用超出限制的索引键前缀长度会返回错误。

      如果在创建MySQL实例时通过指定选项将InnoDB页面大小减小到8KB或4KB innodb_page_size,则基于16KB页面大小的3072字节限制,按比例减小索引键的最大长度。即,当页面大小为8KB时,最大索引键长度为1536字节,而当页面大小为4KB时,最大索引键长度为768字节。

      适用于索引键前缀的限制也适用于全列索引键。

    • 多列索引最多允许16列。超过限制将返回错误。

      ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed
      
    • 对于4KB,8KB,16KB和32KB的页面大小,最大的行大小(不包括页面外存储的任何可变长度列)都小于页面的一半。例如,默认的最大innodb_page_size16KB 行大小约为8000个字节。但是,对于InnoDB 64KB 的页面大小,最大行大小约为16000字节。LONGBLOBLONGTEXT列必须小于4GB,并且总行大小(包括BLOBTEXT列)必须小于4GB。

      如果一行的长度少于一页的一半,则所有行都将存储在本地页面内。如果超过一页的一半,则如“文件空间管理”中所述,选择可变长度列用于外部页外存储,直到该行适合半页。

    • 尽管InnoDB内部支持大于65,535字节的行大小,但是MySQL本身对所有列的组合大小强加了65,535的行大小限制。请参见“数据表的限制”。
    • 在某些较旧的操作系统上,文件必须小于2GB。这不是InnoDB限制。如果需要大型系统表空间,请使用几个较小的数据文件(而不是一个大型数据文件)对其进行配置,或者在每个表文件和常规表空间数据文件之间分配表数据。
    • InnoDB日志文件的最大总大小为512GB。
    • 最小表空间大小略大于10MB。最大表空间大小取决于InnoDB页面大小。

      InnoDB最大表空间大小

      InnoDB页面大小最大表空间大小
      4KB16TB
      8KB32TB
      16KB64TB
      32KB128TB
      64KB256TB

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

    • 表空间文件的路径(包括文件名)不能超过MAX_PATHWindows 的限制。在Windows 10之前,MAX_PATH限制为260个字符。从Windows 10版本1607开始,MAX_PATH已从常见Win32文件和目录功能中删除了限制,但必须启用新行为。
    • 有关与并发读写事务关联的限制,请参见“撤消日志”。

    InnoDB的限制和限制

    本节描述了InnoDB存储引擎的限制和局限性。

    • 你不能创建一个表与一个内部的名称相匹配的列名InnoDB列(其中包括DB_ROW_IDDB_TRX_ID,和DB_ROLL_PTR。此限制适用于任何大小写使用的名称。

      mysql> CREATE TABLE t1 (c1 INT, db_row_id INT) ENGINE=INNODB;
      ERROR 1166 (42000): Incorrect column name 'db_row_id'
      
    • SHOW TABLE STATUSInnoDB除了表保留的物理大小外,不提供表的准确统计信息。行数只是SQL优化中使用的粗略估计。
    • InnoDB不会在表中保留内部行数,因为并发事务可能同时“看到”不同数量的行。因此,SELECT COUNT(*)语句仅对当前事务可见的行进行计数。

      有关信息如何InnoDB处理SELECT COUNT(*)报表,请参阅COUNT()在描述第12.20.1,“集合(GROUP BY)功能说明”。

    • ROW_FORMAT=COMPRESSED页面大小大于16KB不受支持。
    • 使用特定InnoDB页面大小(innodb_page_size)的MySQL实例不能使用来自使用不同页面大小的实例的数据文件或日志文件。
    • 有关与使用可移植表空间功能导入表相关的限制,请参阅表导入限制。
    • 有关与在线DDL相关的限制,请参见“在线DDL限制”。
    • 有关与常规表空间相关的限制,请参见常规表空间限制。
    • 有关静态数据加密的限制,请参阅加密限制。