複合インデックスを使用して MySQL テーブルを作成すると、ユーザーは次のようなエラーに遭遇する可能性があります。エラー「指定されたキーが長すぎます。キーの最大長は 1000 バイトです。」このエラーは、インデックス付き列の結合長が最大許容ストレージ サイズの 1000 バイトを超えていることを示します。
提供されたコード スニペットの問題は、インデックス複合インデックスの長さが長すぎることにあります:
KEY `index` (`parent_menu_id`,`menu_link`,`plugin`,`alias`)
このエラーを解決するには、次のことを検討してください。以下:
1.インデックスの長さの最適化:
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 サイトの他の関連記事を参照してください。