MySQL innodb_large_prefix 参数

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL innoDB 表的索引长度限制

现象

创建数据库表的时候,报错:ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

信息很明确,就是由于 innoDB 表的索引长度限制,那么为什么会有这个限制,怎么消除这个限制,当然分析了下。

原因

其实,在 MySQL5.6 版本后引入了参数 innodb_large_prefix 可以解决这个问题。该参数控制是否允许单列的索引长度超过 767 字节,有 ON 和 OFF 两个取值:

  • ON :Innodb 表的行记录格式(row format)是 Dynamic 或 Compressed 的前提下,单列索引长度上限扩展到 3072 个字节,联合索引长度上线仍为 3072 个字节
  • OFF:Innodb 表的单例索引长度最多为 767 个字节,索引长度超出后,主键索引会创建失败,唯一索引也会创建失败,辅助索引会被截断成为前缀索引

解决方案

使用前缀索引,减少字段索引长度;

设置 MySQL 的全局参数 innodb_large_prefix=ON,将 InnoDB 表的索引上限扩大到 3072 个字节。

说明

字段 varchar(N)中的 N 是指字符的长度,不是字节数,需要结合字符集换算得出字节数。例如:utf8 字符集一个字符占 3 个字节,若单列索引限制 767,则最大可以支持 N=255.而 utf8mb4 字符集一个字符占 4 个字节,若单列索引限制 767,则最大可以支持 N=191。

建议

  • 在数据库迁移和数据库版本升级的过程中,需要对齐源库和目标库的 innodb_large_prefix 参数取值,否则可能导致建表失败
  • 在设计数据库表结构的过程中,对于一个可能包含很长字符串的列上创建索引时尽量使用前缀索引
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 关系型数据库 MySQL
MySQL引擎对决:深入解析MyISAM和InnoDB的区别
MySQL引擎对决:深入解析MyISAM和InnoDB的区别
37 0
|
6天前
|
运维 负载均衡 关系型数据库
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
|
6天前
|
存储 SQL 关系型数据库
mysql中MyISAM和InnoDB的区别是什么
mysql中MyISAM和InnoDB的区别是什么
12 0
|
12天前
|
存储 关系型数据库 MySQL
【MySQL系列笔记】InnoDB引擎-数据存储结构
InnoDB 存储引擎是MySQL的默认存储引擎,是事务安全的MySQL存储引擎。该存储引擎是第一个完整ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和 CPU。因此很有必要学习下InnoDB存储引擎,它的很多架构设计思路都可以应用到我们的应用系统设计中。
175 4
|
16天前
|
存储 监控 关系型数据库
【MySQL】InnoDB 什么情况下会产生死锁
【MySQL】InnoDB 什么情况下会产生死锁
|
18天前
|
SQL 关系型数据库 MySQL
|
18天前
|
存储 缓存 关系型数据库
|
24天前
|
存储 缓存 关系型数据库
MySQL的InnoDB引擎:深度解析与应用
【4月更文挑战第20天】本文深入探讨MySQL的InnoDB引擎,它采用MVCC和行级锁定实现高并发、高性能数据操作。InnoDB通过缓冲池减少I/O,支持ACID事务、外键约束和行级锁定,提供数据一致性。此外,还支持全文索引和灵活的索引策略。其高并发性能、数据一致性和可扩展性使其成为首选存储引擎。
43 12
|
1月前
|
存储 SQL 关系型数据库
mysql 回表的代价(InnoDB)
mysql 回表的代价(InnoDB)
|
1月前
|
存储 关系型数据库 MySQL
mysql 索引的代价(InnoDB)
mysql 索引的代价(InnoDB)

推荐镜像

更多