ホームページ >データベース >mysql チュートリアル >MySQL の「指定されたキーが長すぎます。最大キー長は 1000 バイトです」エラーを解決する方法?
問題:
の作成時に「指定されたキーが長すぎます。キーの最大長は 1000 バイトです」というエラーが発生しました。特定のクエリを含む MySQL テーブル。このクエリには、複数の列とそれらの一部に結合されたインデックスを含むテーブルの作成が含まれます。
説明:
このエラーは、インデックス付き列の合計の長さが超過した場合に発生します。 MySQL で許可される最大キー長は 1000 バイトです。この場合、「index」キーは VARCHAR データ型の 4 つの列にまたがり、それぞれの最大長は 255 文字です。
解決策:
として提供された解決策で述べられているように、このエラーの根本的な原因は、インデックス付き列の長さが長すぎることです。これを解決するには、データの一部のみにインデックスを付けるプレフィックス インデックスを使用することをお勧めします。これは、インデックスを定義するときにインデックス付きの各列の長さを指定することによって実現されます。例:
... KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50)) ...
最適なプレフィックス長の決定:
各列の最適なプレフィックス長を決定するには、データ分布を分析することをお勧めします。次のようなクエリを使用できます。
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`;
このクエリは、特定の長さ以下の文字列を含む行の割合を提供します。これらの結果に基づいて、余分なスペースを無駄にすることなく、データの大部分をカバーするプレフィックス長を選択できます。たとえば、文字列の 80% が 20 文字未満である場合、プレフィックスの長さは 50 で十分である可能性があります。
追加メモ:
次のことも重要です。元のクエリで使用されている INT(1) および INT(32) データ型は、ストレージや値の範囲に影響を与えないことに注意してください。 INT は常に 32 ビット整数型で、-2,147,483,648 ~ 2,147,483,647 の値を使用できます。このような場合の数値引数は主に表示パディングに影響し、基になるストレージには影響しません。
以上がMySQL の「指定されたキーが長すぎます。最大キー長は 1000 バイトです」エラーを解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。