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

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

Susan Sarandon
Susan Sarandon原创
2024-12-13 19:21:10688浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn