ホームページ >データベース >mysql チュートリアル >MySQL エラー 1071:「指定されたキーが長すぎます。最大キー長は 1000 バイトです」を解決する方法?

MySQL エラー 1071:「指定されたキーが長すぎます。最大キー長は 1000 バイトです」を解決する方法?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-13 19:21:10690ブラウズ

How to Solve MySQL Error 1071:

MySQL エラー 1071: 「指定されたキーが長すぎます。キーの最大長は 1000 バイトです」

複合インデックスを使用して 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。