首页 > 数据库 > mysql教程 > 如何解决 MySQL 错误 1071:'指定的密钥太长;最大密钥长度为 1000 字节”?

如何解决 MySQL 错误 1071:'指定的密钥太长;最大密钥长度为 1000 字节”?

Susan Sarandon
发布: 2024-12-13 19:21:10
原创
690 人浏览过

How to Solve MySQL Error 1071:

MySQL Error 1071: "Specified key was too long; max key length is 1000 bytes"

在创建带有复合索引的 MySQL 表时,用户可能会遇到错误“指定的密钥太长;最大密钥长度为 1000 字节”。此错误表明索引列的组合长度超过了允许的最大存储大小 1000 字节。

提供的代码片段中的问题在于索引复合索引的长度过大:

KEY `index` (`parent_menu_id`,`menu_link`,`plugin`,`alias`)
登录后复制

解决方案

要解决此错误,请考虑以下:

1。优化索引长度:

  • 长 VARCHAR 列通常不应被索引,因为索引庞大且效率低下。
  • 使用前缀索引仅索引数据的子集,这通常比整个长度短得多列。
KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50))
登录后复制

2.确定最佳前缀长度:

使用以下查询确定给定列的最佳前缀长度:

SELECT
 ROUND(SUM(LENGTH(`menu_link`)<10)*100/COUNT(`menu_link`),2) AS pct_length_10,
 ROUND(SUM(LENGTH(`menu_link`)<20)*100/COUNT(`menu_link`),2) AS pct_length_20,
 ROUND(SUM(LENGTH(`menu_link`)<50)*100/COUNT(`menu_link`),2) AS pct_length_50,
 ROUND(SUM(LENGTH(`menu_link`)<100)*100/COUNT(`menu_link`),2) AS pct_length_100
FROM `pds_core_menu_items`;
登录后复制

例如,如果查询返回:

+---------------+---------------+---------------+----------------+
| pct_length_10 | pct_length_20 | pct_length_50 | pct_length_100 |
+---------------+---------------+---------------+----------------+
|         21.78 |         80.20 |        100.00 |         100.00 |
+---------------+---------------+---------------+----------------+
登录后复制

表示80%的字符串少于20个字符,所以前缀长度为50足够了。

3.调整 INT 数据类型:

后跟数字参数的 INT 数据类型(例如 INT(1))不会影响存储或值范围。 INT 数据类型始终占用 4 个字节,允许的值范围为 -2147483648 到 2147483647。数字参数仅影响显示期间的填充。

以上是如何解决 MySQL 错误 1071:'指定的密钥太长;最大密钥长度为 1000 字节”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板