news 2026/6/10 17:40:12

MySQL单行数据最大可以存储多少?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL单行数据最大可以存储多少?

MySQL 单行数据的最大存储限制,并非一个固定值,而是由存储引擎、页大小、行格式、列类型共同决定的动态上限。


一、InnoDB 行大小硬限制

1.官方文档定义
  • 最大行大小略小于 16KB 的页大小(默认 16,384 字节)
  • 实际可用空间
    ≈ 8,000 字节(因页头/尾、系统列、预留空间占用)

关键公式
有效行大小 ≤ 16,384 - 页开销(~200B) - 系统列(13B) - 预留空间(~7,000B)

2.为什么不是 16KB?
  • 页结构开销
    • 页头/尾:约 120 字节
    • 事务ID + 回滚指针:13 字节
    • NULL 位图(列数+7)/8字节
    • 变长字段长度列表:1~2 字节/字段
  • 预留空间
    InnoDB 为行更新预留约 50% 页空间(防页分裂)

⚠️实测上限
单行总数据(不含溢出)≤ 7,950 字节(MySQL 8.0)


二、突破限制:溢出页(Off-page Storage)

当行数据超过阈值,InnoDB 自动将大字段存入溢出页(Overflow Pages)

列类型溢出阈值存储方式
TEXT/BLOB> 768 字节主键页存 20 字节指针,数据存独立页
VARCHAR> 768 字节同 TEXT
JSON总大小 > 768 字节同 TEXT

效果
逻辑行大小无硬上限(受限于innodb_page_size和磁盘空间)

示例:
CREATETABLEt(idINTPRIMARYKEY,contentLONGTEXT-- 可存 4GB 数据);
  • 主键页:仅存id+ 20 字节指针
  • 溢出页content数据分散在多个 16KB 页中

三、各列类型的存储上限

类型最大值磁盘占用
TINYINT1 字节1B
INT4 字节4B
BIGINT8 字节8B
VARCHAR(N)65,535 字节实际长度 + 1~2B 长度前缀
TEXT65,535 字节同 VARCHAR
MEDIUMTEXT16MB指针 + 溢出页
LONGTEXT4GB指针 + 溢出页
JSON≈ 1GB以 TEXT 形式存储

⚠️注意
所有列总和 ≤ 65,535 字节(MySQL 行格式限制,非 InnoDB)


四、行格式(ROW_FORMAT)的影响

格式溢出策略适用场景
COMPACT> 768 字节溢出旧版本兼容
DYNAMIC所有大字段直接溢出推荐!减少主键页碎片
REDUNDANT已废弃

最佳实践

CREATETABLEt(...)ROW_FORMAT=DYNAMIC;

五、极端情况测试

1.最大单行(无溢出)
-- 创建接近 8KB 的行CREATETABLEmax_row(c1VARCHAR(7000),c2VARCHAR(900))ROW_FORMAT=DYNAMIC;
  • 插入INSERT INTO max_row VALUES (REPEAT('a',7000), REPEAT('b',900));
  • 结果:成功(总 ≈ 7,900B)
2.最大单行(含溢出)
-- 存储 1GB JSONCREATETABLEhuge_json(idINTPRIMARYKEY,dataJSON)ROW_FORMAT=DYNAMIC;INSERTINTOhuge_jsonVALUES(1,LOAD_FILE('/path/to/1gb.json'));
  • 结果:成功(主键页仅存指针)

六、生产建议

  1. 避免宽表

    • 单行 > 4KB 会降低 Buffer Pool 效率
    • 将大字段拆到单独表
  2. 强制 DYNAMIC 格式

    SETGLOBALinnodb_file_format=Barracuda;SETGLOBALinnodb_file_per_table=ON;CREATETABLEt(...)ROW_FORMAT=DYNAMIC;
  3. 监控溢出页

    -- 查看溢出页使用SELECT*FROMINFORMATION_SCHEMA.INNODB_SYS_TABLESPACESWHERENAME='your_db/your_table';

总结

  • 物理行上限≈ 8,000 字节(主键页内)
  • 逻辑行上限4GB(通过溢出页)
  • 工程原则
    “单行越小,Buffer Pool 效率越高;大字段必须溢出”
    ROW_FORMAT=DYNAMIC+ 拆分宽表,方能兼顾容量与性能。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 13:02:18

JarEditor革命:无需解压直接编辑JAR文件的高效方案

JarEditor革命:无需解压直接编辑JAR文件的高效方案 【免费下载链接】JarEditor IDEA plugin for directly editing classes/resources in Jar without decompression. (一款无需解压直接编辑修改jar包内文件的IDEA插件) 项目地址: https://…

作者头像 李华
网站建设 2026/6/10 12:46:22

手把手教你用AhabAssistant:Limbus Company懒人必备神器

手把手教你用AhabAssistant:Limbus Company懒人必备神器 【免费下载链接】AhabAssistantLimbusCompany AALC,大概能正常使用的PC端Limbus Company小助手 项目地址: https://gitcode.com/gh_mirrors/ah/AhabAssistantLimbusCompany 还在为Limbus C…

作者头像 李华
网站建设 2026/6/10 12:41:21

palera1n越狱工具终极指南:解锁iOS设备无限可能

palera1n越狱工具终极指南:解锁iOS设备无限可能 【免费下载链接】palera1n Jailbreak for arm64 devices on iOS 15.0 项目地址: https://gitcode.com/GitHub_Trending/pa/palera1n palera1n是一款基于checkm8硬件漏洞的iOS越狱工具,支持从iOS 15…

作者头像 李华
网站建设 2026/6/10 12:46:41

Anki Connect终极指南:如何通过API实现自动化学习记忆

Anki Connect终极指南:如何通过API实现自动化学习记忆 【免费下载链接】anki-connect Anki plugin to expose a remote API for creating flash cards. 项目地址: https://gitcode.com/gh_mirrors/an/anki-connect Anki Connect是一个革命性的开源插件&#…

作者头像 李华
网站建设 2026/6/10 12:45:13

Qwen3-VL镜像精选:5个预配置环境,打开浏览器就能用

Qwen3-VL镜像精选:5个预配置环境,打开浏览器就能用 引言:为什么你需要预配置的Qwen3-VL镜像? 最近在GitHub上看到各种Qwen3-VL的衍生项目是不是很心动?作为阿里开源的强大视觉语言模型,Qwen3-VL能实现图片…

作者头像 李华
网站建设 2026/6/10 10:47:11

Qwen3-VL轻量版体验:云端GPU跑4B/8B,显存要求降80%

Qwen3-VL轻量版体验:云端GPU跑4B/8B,显存要求降80% 引言:为什么选择Qwen3-VL轻量版? 作为个人开发者,你可能已经听说过阿里推出的Qwen3-VL多模态大模型,它能同时处理文本和图像,非常适合开发智…

作者头像 李华