01

目录

02

前言

最近一个朋友遇到一个面试题:MySQL的InnoDB的一个表最多能存多少数据?这么一问,我瞬间也蒙圈了,这是我的知识盲区啊,之前还从来没考虑过这样的问题。那我怎么能甘心的,只好去网上一顿查资料,下面我就分享一下我查到的结果。版本Mysql8.0。

03

表的最大大小

表的最大大小也是表空间的最大大小。最小表空间大小略大于10MB。最大表空间大小取决于 InnoDB页面大小。

InnoDB页面大小 最大表空间大小
4KB 16TB
8KB 32TB
16KB 64TB
32KB 128TB
64KB 256TB

在某些较旧的操作系统上,文件必须小于2GB。这不是InnoDB限制。如果需要大型系统表空间,请使用几个较小的数据文件(而不是一个大型数据文件)进行配置,或者在每个表文件和常规表空间数据文件之间分配表数据。看完这个发现,居然不是一个固定的答案。。。它会跟InnoDB设置的页面大小有关。。。(内心呐喊!)了解了这一个,我们接着来看看还有哪些我们都没考虑过的“奇奇怪怪”的限制~

04

列的最大数量

这是一个坑点!为什么这么说?因为InnoDB的限制和MySQL的限制不一样!!!

  • InnoDB一个表最多可以包含1017列。虚拟生成的列包含在此限制中。

  • MySQL对每个表有4096列的硬限制,但是对于给定的表,有效最大值可能会更少。确切的列限制取决于几个因素:

    看着头都大了。。。

    • 一个表的最大行大小限制了列的数量(可能还有大小),因为所有列的总长度不能超过该大小。

    • 单个列的存储要求限制了给定最大行大小内的列数。某些数据类型的存储要求取决于存储引擎,存储格式和字符集等因素。

    • 存储引擎可能会施加其他限制表列计数的限制。例如, InnoDB每个表的限制为1017列。

    • 功能键部分被实现为隐藏的虚拟生成的存储列,因此表索引中的每个功能键部分都计入表的总列数限制。

05

行大小限制

给定表的最大行大小由几个因素决定:

  • MySQL表的内部表示具有65,535字节的最大行大小限制,即使存储引擎能够支持更大的行也是如此。BLOBTEXT列仅有助于朝向行大小限制9〜12字节,因为它们的内容是从该行的其余部分分开存储。

  • InnoDB 对于4KB,8KB,16KB和32KB innodb_page_size设置,表 的最大行大小(适用于本地存储在数据库页面内的数据)略小于页面的一半 。例如,对于默认的16KB InnoDB页面大小,最大行大小略小于8KB 。对于64KB页面,最大行大小略小于16KB。LONGBLOBLONGTEXT列必须小于4GB,并且总行大小(包括BLOB和 TEXT列)必须小于4GB。

  • 不同的存储格式使用不同数量的页面标题和尾部数据,这会影响行可用的存储量。

行大小限制示例:

mysql> CREATE TABLE t (a VARCHAR(10000), b VARCHAR(10000),       c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),       f VARCHAR(10000), g VARCHAR(6000)) ENGINE=InnoDB CHARACTER SET latin1;ERROR 1118 (42000): Row size too large. The maximum row size for the usedtable type, not counting BLOBs, is 65535. This includes storage overhead,check the manual. You have to change some columns to TEXT or BLOBs

InnoDB 表的操作成功,因为更改列 TEXT可以避免MySQL 65,535字节的行大小限制,而InnoDB 变长列的页外存储可以避免 InnoDB行大小限制。

mysql> CREATE TABLE t (a VARCHAR(10000), b VARCHAR(10000),       c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),       f VARCHAR(10000), g TEXT(6000)) ENGINE=InnoDB CHARACTER SET latin1;Query OK, 0 rows affected (0.02 sec)

06

索引限制

  • InnoDB一个表最多可以包含64个二级索引。

  • 对于InnoDB使用表DYNAMIC(MySQL8.0默认行格式)或 COMPRESSED行格式的表, 索引键前缀长度限制为3072字节 。

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

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

  • 如果在创建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

07

结语

这些限制平时真的是没接触过,不过居然有人面试会问这个东西,想想都很可怕。

内容都来自MySQL官网~感兴趣的可以去点击“查看原文”去官网看。不得不说,官网的资料是真全啊,就是看完之后发现自己对MySQL其实是一无所知。。。


如有错误,欢迎指出。

欢迎大家关注我的个人技术分享公众号,可以推荐身边的朋友关注哦~

点此留言

tika设置文件长度限制_MySQLInnoDB某些你没注意过的限制相关推荐

  1. ComicEnhancerPro 系列教程十八:JPG文件长度与质量

    作者:马健 邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十八:JPG文件长 ...

  2. 服务器设置文件夹权限代码,服务器设置文件夹权限

    服务器设置文件夹权限 内容精选 换一换 媒资管理中显示的音视频文件同音视频管理中是一致的,除了有音视频管理页面的相关功能,您还可以在媒资管理中创建图片组并上传图片,以及创建文件夹.媒资管理暂只支持&q ...

  3. springboot设置文件上传大小(tomcat默认1M)

    application.yml # 设置文件上传大小(tomcat默认1M) server:tomcat:max-http-form-post-size: -1 spring:servlet:mult ...

  4. 设置文件权限位时我们一般忽略了suid/guid的存在,现在看看它们到底是怎么回事

    设置文件权限位时我们一般忽略了suid/guid的存在,现在看看它们到底是怎么回事. suid/guid是什么? suid意味着如果A用户对属于他自己的shell脚本文件设置了这种权限,那么其他用户在 ...

  5. linux chown 命令 更改设置文件对应的用户和组

    更改设置文件对应的用户和组 chown语法: chown [选项]-[所有者][:[用户组]] 文件-- root@localhost ~]# chown root.root 1.txt # 同时修改 ...

  6. IIS 6和IIS 7 中设置文件上传大小限制设置方法,两者是不一样的

    在IIS 6.0中设置文件上传大小的方法,只要设置httpRuntime就可以了 <system.web><httpRuntime executionTimeout="36 ...

  7. CMD中使用attrib命令设置文件只读、隐藏属性详解

    本文介绍一个cmd下的一个attrib.exe的小程序,它可以用来设置文件的属性.我们知道文件的属性有只读.隐藏.系统.存档和无内容索引等5个,只读和隐藏用得比较多,另外三个用得比较少. 不知道大家有 ...

  8. Ubuntu用户设置文件说明

    Ubuntu用户设置文件说明 Ubuntu作为Linux的一个发行版本,自然具有Linux系统的多用户特性.因为经常会使用和管理Ubuntu的用户,现将Ubuntu系统下的User的个性化配置整理如下 ...

  9. Deepin中设置文件或文件夹权限

    Deepin中设置文件或文件夹权限 -R 递归进行某项操作,不论是删除文件夹或者修改文件夹下所有文件权限 权限更改,777相当于完全控制权限: 更改一个文件夹或文件的权限:chmod 777 文件路径 ...

最新文章

  1. cisco vrrp
  2. 计算机软考证书英文名称完全翻译指南
  3. node.js 执行php,node.js - 如何利用php执行nodejs文件
  4. java dateutil 获取时间戳_java DateUtil工具类时间戳类型转换详解
  5. 1098: 复合函数求值(函数专题)
  6. Domino9下web群组维护添加log维护记录
  7. Spring 全局异常拦截根据业务返回不同格式数据 自定义异常
  8. java 从_java-从查询字符串中过滤参数(使用番石榴?...
  9. fly bird用java怎么写,java-flybird_wang-51CTO博客
  10. 广义线性模型matlab,使用广义线性模型拟合数据
  11. RPG多人回合制游戏战斗框架设计《一:基本战斗流程》
  12. 2017东北四省赛G题
  13. api接口—闲鱼搜索的数据
  14. 门限签名技术火了,它的硬核之处绝不仅仅是秘密共享……
  15. AI火爆干货最全整理!五套深度学习和算法学习教程和三套Python学习视频!!!限时无套路免费领取!...
  16. 用SRS搭建流媒体系统
  17. Pycharm专业版安装详细教程!
  18. Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】
  19. 延迟10us程序C语言,C语言之延时
  20. 脚本一键部署(dhcp、dns、pxe、raid、nfs+apache+expect、lvm、磁盘分区、监控资源)

热门文章

  1. mysql数据结构_mysql的底层数据结构
  2. python中空字符串的布尔值是什么_Python的布尔值与空值
  3. python爬取b站评论_python高效之爬了B站再爬微博
  4. linux 查找tomcat目录,linux下通过tomcat访问某路径下的文件
  5. python调用matlab函数_从python调用MATLAB函数
  6. 英特尔的务实创新之路:实在做技术,赋能开发者 | InfoQ推荐
  7. 致准医学博士生的乘风破浪秘籍
  8. 年少恶习累累,成年用语言骗全世界, 用心理学撩妹, 最后被总理接见
  9. 招聘、招聘,我就这样被算法选中
  10. Flink 1.10 细粒度资源管理解析