首頁 > 資料庫 > mysql教程 > 如何解決 MySQL 錯誤 1071:「指定的金鑰太長;最大金鑰長度為 1000 位元組」?

如何解決 MySQL 錯誤 1071:「指定的金鑰太長;最大金鑰長度為 1000 位元組」?

Susan Sarandon
發布: 2024-12-13 19:21:10
原創
692 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板