
MySQL前缀索引上限案例分析
修改表结构:对字段长度进行缩减。 添加 切换数据库版本:如果当前使用的是MySQL 5.6,请升级至 5.7 或更高版本以利用新的动态行模式。
发布日期:2021-05-18 09:16:20
浏览次数:24
分类:精选文章
本文共 1369 字,大约阅读时间需要 4 分钟。
MySQL索引长度限制及解决方案
1.1 问题描述
在开发过程中,可能会遇到如下错误提示:
1071 Specified key was too long; max key length is 767 bytes
该错误表明索引长度超过 MySQL的默认限制。MySQL对索引长度的限制主要取决于以下因素:
- InnoDB 文件格式:默认为
Antelope
或Barracuda
。 - 行格式:默认为
Compact
(MySQL 5.6 及以上版本)。 - 字符集:字符集设置影响索引前缀长度。如果使用
utf8mb4
字符集,索引前缀长度最大值为 191 字节;使用utf8
则为 255 字节;使用latin1
则为 767 字节。
1.2 问题处理
针对索引长度超限问题,有三种常见解决方案:
ROW_FORMAT=DYNAMIC
:MySQL 5.7 及以上版本支持动态行模式,可通过 ROW_FORMAT=DYNAMIC
提升索引前缀长度。2.1 行模式分析
MySQL 的行模式分为四种:
- Redundant:主要用于大数据场景,适合需要极大存储效率的需求。
- Compact:默认行模式,兼具存储效率与查询性能。
- Dynamic:默认于 MySQL 5.7,支持索引前缀长度达到 3072 字节。
- Compressed:基于
Dynamic
的基础上,进一步优化存储压缩。
2.2 索引前缀长度优化
在不同行模式下,索引前缀长度的最大值如下:
- Redundant 和 Compact:768 字节。
- Dynamic 和 Compressed:3072 字节。
需要注意:
- 字符集:
utf8mb4
的每字符占 4 字节,索引前缀长度会因字符集类型而有所不同。 - 参数设置:
innodb_file_format=Barracudarow_format=dynamicinnodb_large_prefix=on
3.1 列与字符集限制
- 定长字段 (
char
):最大长度为 255 字节。 - 可变长字段 (
varchar
):utf8
:最大长度为 255 字节。utf8mb4
:最大长度为 191 字节。latin1
:最大长度为 767 字节。
- 总列数限制:MySQL 表中列总数不应超过 4096 列,具体还需考虑表的最大行大小。
3.2 行大小限制
InnoDB 表的行最大大小为 65535 字节(不计 BLOB 列)。对于可变长字段:
- 767 字节及以下:行记录存储在 InnoDB中的 B-tree 节点中,无额外溢出页。
- 767 字节及以上:部分记录存储在溢出页中。
3.3 数据型建议
- 若需要较大字段可变长数据,建议使用
TEXT
或BLOB
,这样存储引擎会在行记录中仅存储大小信息,而实际数据存储在分离的溢出页中。
4. 实用注意事项
- 定期检查:确保字段长度与索引长度设置符合业务需求。
- 性能优化:根据业务特点选择合适的行模式(如
dynamic
或compressed
)以平衡存储空间与查询性能。
通过以上方法,可以有效解决索引长度超限的错误,并优化数据库性能。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年05月06日 16时26分56秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
EF 资料
2025-03-29
EF6与MVC5系列(4):在MVC应用程序中使用弹性连接和命令拦截
2025-03-29
Effective C# 学习笔记(四十五)减少装箱拆箱行为
2025-03-29
Effective Modern C++:02auto
2025-03-29
efficientnet最合适的尺寸和最后一层的层数
2025-03-29
EF三种编程方式详细图文教程(C#+EF)之Database First
2025-03-29
Ehcache Java开源缓存框架
2025-03-29
EhCache 分布式缓存/缓存集群
2025-03-29
EHR:对人力资源信息系统的认识
2025-03-29
EJB学习笔记六(EJB中的拦截器)
2025-03-29
el-form表单重置后输入失效
2025-03-29
el-select下拉框修改背景色
2025-03-29
el-table select事件判断当前项是否勾选
2025-03-29
Elasticsearch & Kibana & Filebeat开启SSL通信
2025-03-29
ElasticSearch - DSL查询文档语法,以及深度分页问题、解决方案
2025-03-29
ElasticSearch - 分布式搜索引擎底层实现——倒排索引
2025-03-29