网站设计人员就业要求,2345软件大全,一个完整的网站 技术,更改wordpress最大文件01—目录02—前言最近一个朋友遇到一个面试题#xff1a;MySQL的InnoDB的一个表最多能存多少数据#xff1f;这么一问#xff0c;我瞬间也蒙圈了#xff0c;这是我的知识盲区啊#xff0c;之前还从来没考虑过这样的问题。那我怎么能甘心的#xff0c;只好去网上一顿查资料… 01—目录02—前言最近一个朋友遇到一个面试题MySQL的InnoDB的一个表最多能存多少数据这么一问我瞬间也蒙圈了这是我的知识盲区啊之前还从来没考虑过这样的问题。那我怎么能甘心的只好去网上一顿查资料下面我就分享一下我查到的结果。版本Mysql8.0。03—表的最大大小表的最大大小也是表空间的最大大小。最小表空间大小略大于10MB。最大表空间大小取决于 InnoDB页面大小。InnoDB页面大小最大表空间大小4KB16TB8KB32TB16KB64TB32KB128TB64KB256TB在某些较旧的操作系统上文件必须小于2GB。这不是InnoDB限制。如果需要大型系统表空间请使用几个较小的数据文件(而不是一个大型数据文件)进行配置或者在每个表文件和常规表空间数据文件之间分配表数据。看完这个发现居然不是一个固定的答案。。。它会跟InnoDB设置的页面大小有关。。。(内心呐喊)了解了这一个我们接着来看看还有哪些我们都没考虑过的“奇奇怪怪”的限制~04—列的最大数量这是一个坑点为什么这么说因为InnoDB的限制和MySQL的限制不一样InnoDB一个表最多可以包含1017列。虚拟生成的列包含在此限制中。MySQL对每个表有4096列的硬限制但是对于给定的表有效最大值可能会更少。确切的列限制取决于几个因素看着头都大了。。。一个表的最大行大小限制了列的数量(可能还有大小)因为所有列的总长度不能超过该大小。单个列的存储要求限制了给定最大行大小内的列数。某些数据类型的存储要求取决于存储引擎存储格式和字符集等因素。存储引擎可能会施加其他限制表列计数的限制。例如 InnoDB每个表的限制为1017列。功能键部分被实现为隐藏的虚拟生成的存储列因此表索引中的每个功能键部分都计入表的总列数限制。05—行大小限制给定表的最大行大小由几个因素决定MySQL表的内部表示具有65,535字节的最大行大小限制即使存储引擎能够支持更大的行也是如此。BLOB和 TEXT列仅有助于朝向行大小限制9〜12字节因为它们的内容是从该行的其余部分分开存储。InnoDB 对于4KB8KB16KB和32KB innodb_page_size设置表 的最大行大小(适用于本地存储在数据库页面内的数据)略小于页面的一半 。例如对于默认的16KB InnoDB页面大小最大行大小略小于8KB 。对于64KB页面最大行大小略小于16KB。LONGBLOB和 LONGTEXT列必须小于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)) ENGINEInnoDB 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)) ENGINEInnoDB CHARACTER SET latin1;Query OK, 0 rows affected (0.02 sec)06—索引限制InnoDB一个表最多可以包含64个二级索引。对于InnoDB使用表DYNAMIC(MySQL8.0默认行格式)或 COMPRESSED行格式的表 索引键前缀长度限制为3072字节 。对于使用REDUNDANT或COMPACT行格式的InnoDB表索引键前缀长度限制为767个字节。例如假设utf8mb4字符集且每个字符最多4个字节则您可能在TEXT或VARCHAR列上使用超过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 allowed07—结语这些限制平时真的是没接触过不过居然有人面试会问这个东西想想都很可怕。内容都来自MySQL官网~感兴趣的可以去点击“查看原文”去官网看。不得不说官网的资料是真全啊就是看完之后发现自己对MySQL其实是一无所知。。。如有错误欢迎指出。 欢迎大家关注我的个人技术分享公众号可以推荐身边的朋友关注哦~点此留言