MySQL之最

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: # 最大和最小 1. 一个表里最多可有1017列(在MySQL 5.6.9 之前最大支持1000列)。虚拟列也受限这个限制。 2. 一个表最多可以有64个二级索引。 3. 如果innodb_large_prefix打开,在InnoDB表DYNAMIC或COMPRESSED列格式下,索引前缀最大支持前3072字节;如果不打开的话,在任意列格式下,最多支持前767字节。 这个限制既适用于前缀索

最大和最小

  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页管理)。

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

例如:

 
        -> 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 somecolumns to TEXT or BLOBs```
</pre>
8. 在一些老操作系统中,文件必须小于2GB。这并非是InnoDB本身的限制,如果你需要大的表空间,就要配置使用几个小的数据文件而不是一个大的数据文件。
9. InnoDB日志文件组合大小最大可以是512GB。
10. 最小的表空间是10MB,最大的表空间取决于InnoDB页大小(最大表空间也就是最大表大小)。

<p>InnoDB表空间大小
<table > 
<tr><td>InnoDB页大小</td><td>最大表空间</td>
<tr><td>4KB</td><td>16TB</td>
<tr><td>8KB</td><td>32TB</td>
<tr><td>16KB</td><td>64TB</td>
<tr><td>32KB</td><td>128TB</td>
<tr><td>64KB    </td><td>256TB</td>
</table>
</p>

11. 默认InnoDB页大小是16KB,你可以在创建一个实例的时候,修改配置文件里面这个innodb_page_size来提高或降低页大小。
<p>在 Barracuda文件格式下,ROW_FORMAT=COMPRESSED最大支持page_size 16KB。</p>
<p>除了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。</p>
<p>一个MySQL实例只能指定1个innodb_page_size,而不能根据数据文件或者日志文件定制这些文件的innodb_page_size。</p>

# 表和事务
1. 如果innodb_table_locks=1的话,lock tables需要在每个表上加两把锁。除了在MySQL Server层的表锁,还需要再InnoDB层也加锁。在MySQL 4.1.2之前的版本,不需要InnoDB层的表锁;可以通过设置innodb_table_locks=0选择老的表设定方式。如果没有获取InnoDB层的表锁,即使某些记录被其他事务锁定,lock tables也可以完成。
在MySQL 5.7,innodb_table_locks=0 就会对lock tables ... write显示锁定不起作用。但是通过 lock tables ... writes加隐式锁(比如:触发器) 或者 lock tables ... read加锁,对读或写确实有作用。
2.所有的InnoDB锁都被事务持有,当这个事务已经提交或者回滚的时候,InnoDB的锁就会被释放。所以,在autocommit=1模式下,在InnoDB表上执行lock table没多大意义,因为获取的InnoDB表锁会被立即释放。
3. LOCK TABLES执行隐式commit和unlock table,所以在(锁表)事务过程中你不能再锁其他的表了。
4. 数据修改事务的上限是96*1023个并发事务(undo记录)。在128个回滚段中的32个都被分配给了非redo日志(这些日志是由修改临时表和相关对象事务产生)。这样就把并发修改数据事务的上限从128K降到了96K。这96K限制的是修改非临时表的事务上限。如果所有的修改数据事务都是修改临时表的话,上限是32K个并发事务。

 

<p>参考资料:https://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html   </p>
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
2月前
|
存储 弹性计算 人工智能
2026年阿里云轻量、ECS 与 GPU云服务器租用收费标准说明
阿里云服务器涵盖轻量应用服务器、云服务器 ECS 及 GPU 服务器三大类,适配从个人开发到企业核心业务的不同需求,价格差异显著。以下结合最新收费信息,用通俗语言梳理各机型配置与价格,包含优惠活动、续费规则及附加资源成本,帮助用户精准把控预算。
2026年阿里云轻量、ECS 与 GPU云服务器租用收费标准说明
|
机器学习/深度学习 算法 数据可视化
智能扑克牌识别软件(Python+YOLOv5深度学习模型+清新界面)
智能扑克牌识别软件(Python+YOLOv5深度学习模型+清新界面)
2007 0
|
10月前
|
缓存 自然语言处理 数据挖掘
2025年,ipdodo、stormproxies、PYPROXY、LunaProxy、abcproxy、dataimpulse、proxy cheap这些海外代理用哪家?
随着海外代理IP需求增加,市场上涌现了众多服务商如ipdodo、stormproxies等。然而,这些服务商良莠不齐,语言障碍、时差问题及低效客服机制常让人头疼。
2025年,ipdodo、stormproxies、PYPROXY、LunaProxy、abcproxy、dataimpulse、proxy cheap这些海外代理用哪家?
|
2月前
|
存储 人工智能 移动开发
2026年阿里云最新域名类活动,注册、续费和转入相关活动参考
本文为大家整理了2026年阿里云域名注册、续费和转入相关的,如万网新客权益中心推出39元AI建站赠.CN域名、.com低至35元、.net注册39元起等活动;域名转入每周三享低价,批量注册.cn低至19元、.net低至51元;特色域名如.xin、.xyz等1元起限时特惠。
1210 8
|
4月前
|
人工智能 自然语言处理 语音技术
数字人:不止于“虚拟形象”的技术综合体
数字人是融合3D建模、AI驱动与实时渲染的虚拟交互体,涵盖“躯壳、小脑、大脑”三层技术架构。依托云计算与AIGC,正广泛应用于客服、XR等场景。开发者可借云服务快速构建,迎来全新机遇。
|
5月前
|
JavaScript 前端开发 Java
Python中的Lambda表达式:从入门到灵活运用
Python中Lambda表达式是简洁有力的匿名函数工具,适用于map、filter、排序等场景。本文详解其语法、应用、局限与最佳实践,助你掌握这一函数式编程利器,提升代码简洁性与灵活性。免费教程:https://pan.quark.cn/s/2c17aed36b72
761 0
|
8月前
|
人工智能 自然语言处理 搜索推荐
AI赋能教育与阿里云通义千问的结合
本简介介绍了AI技术如何赋能教育行业,结合阿里云“通义千问”大模型,助力海豚大数据及人工智能实验平台实现个性化教学、智能答疑与资源优化,推动高校与企业人才培养模式革新,构建终身学习生态体系。
579 1
|
数据挖掘 API 开发者
​Email API有哪些,最好的3个API接口有哪些
Email API如SendGrid、Mailgun和AOKSend是企业自动化邮件通信的关键工具。它们提供邮件发送、接收和管理功能,提升效率,优化客户体验。SendGrid以其高可靠性、强大分析和易于集成备受青睐;Mailgun以灵活性和高发送率著称;而AOKSend则以其高效、详细分析和易用性脱颖而出。通过使用这些API,企业能实现定制化邮件服务,跟踪性能,提升邮件营销效果。
|
机器学习/深度学习 自动驾驶 机器人
深度学习之人类行为模仿
基于深度学习的人类行为模仿是指利用深度学习技术构建模型,使计算机系统能够学习、理解、并模仿人类的行为。通过模拟人类的动作、决策过程、情感反应等行为,相关技术在机器人、虚拟助手、人机交互等领域具有广泛的应用前景。
405 5
怎么用super调用超类构造函数?
Java 中的 `super` 关键字用于子类引用父类的构造函数和成员。当子类构造函数需要调用父类的构造函数时,`super` 须作为第一条语句,如 `super(param列表);`,这允许子类初始化父类的属性。示例中,`BoxWeight` 类通过 `super(w, h, d)` 调用 `Box` 的构造函数来设置尺寸,而 `BoxWeight` 自己仅设置重量。`super` 也可用于访问被子类隐藏的父类成员,实现封装。
210 0