🗒️Day91【概念解析】 InnoDB Limits
00 分钟
2023-12-21
2023-12-22
type
status
date
slug
summary
tags
category
icon
password
😄
本文主要介绍下 InnoDB引擎中的一些最值。其中包含 InnoDB 表、索引、表空间和其他方面的最值限制。

整理定义

InnoDB Limits(InnoDB中的最值)
没有明确的行业含义,主要是对InnoDB引擎中的各个方面的值的限制进行整理和归纳说明。

复述展开

表限制

  • 一个表最多可以包含1017列,包括虚拟生成列在内。
  • 一个表最多可以包含64个二级索引。

索引限制

  • 对于使用DYNAMICCOMPRESSED行格式的InnoDB表,索引键前缀长度限制为3072字节。
    • 对于使用REDUNDANTCOMPACT行格式的InnoDB表,索引键前缀长度限制为767字节。例如,如果使用utf8mb4字符集,一个TEXT或VARCHAR列的列前缀索引超过191个字符可能会触发这个限制,因为每个字符最多使用4个字节。
      🎈
      注意事项
      • 尝试使用超过限制的索引键前缀长度会返回错误。
      • 如果在创建MySQL实例时通过指定innodb_page_size选项将InnoDB页面大小减少到8KB或4KB,最大索引键长度会按比例降低,基于16KB页面大小的3072字节限制。即页面大小为8KB时,最大索引键长度为1536字节;页面大小为4KB时,为768字节。
      • 适用于索引键前缀的限制也适用于完整列索引键。
  • 多列索引最多允许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字节。
     
    上一篇
    [分享]unsplash免费图片接口使用与实战
    下一篇
    Day90【概念解析】Transaction Scheduling

    评论
    Loading...