ホームページ >データベース >mysql チュートリアル >「指定されたキーが長すぎます」という MySQL エラーが表示されるのはなぜですか?
MySql エラー: 「指定されたキーが長すぎます」
MySql データベースのクエリ中に、「指定されたキーが長すぎます」というエラーが発生する場合があります長いキー長を持つテーブルを作成する場合。この問題は、単一のインデックスで複数の列を使用する場合によく発生します。
pds_core_menu_items テーブルを使用したケース スタディ
指定されたクエリは、列parent_menu_id、menu_link、プラグイン、およびエイリアス。これらの列は VARCHAR(255) データ型です。
問題の説明
@Devart が述べたように、これらの列を組み合わせた長さは、許可されている最大キー長を超えています。 1000バイト。この制限により、インデックスの作成は指定されたエラーで失敗します。
解決策: プレフィックス インデックス作成
この問題に取り組むベスト プラクティスには、プレフィックス インデックス作成の使用が含まれます。プレフィックス インデックスを使用すると、元のデータの左側の部分文字列のみがインデックス付けされるため、インデックス サイズが大幅に削減され、効率が向上します。
最適なプレフィックス長の決定
各列の最適なプレフィックス長については、次のクエリを実行します。
SELECT ROUND(SUM(LENGTH(`column_name`)<10)*100/COUNT(`column_name`),2) AS pct_length_10, ROUND(SUM(LENGTH(`column_name`)<20)*100/COUNT(`column_name`),2) AS pct_length_20, ROUND(SUM(LENGTH(`column_name`)<50)*100/COUNT(`column_name`),2) AS pct_length_50, ROUND(SUM(LENGTH(`column_name`)<100)*100/COUNT(`column_name`),2) AS pct_length_100 FROM `table_name`;
column_name を列に置き換えます。分析対象であり、table_name はその列を含むテーブルです。出力を分析して、最も高い割合の行をカバーする最小の部分文字列長を特定します。
更新されたクエリ
提供された例では、50 文字の部分文字列のインデックス付けで十分です。 、クエリ結果で示されているように。更新されたクエリは次のとおりです。
KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50))
追加メモ
このエラーは、INT(1) および INT(32) データ型を使用する場合にも発生する可能性があります。これらのデータ型はストレージ サイズや値の範囲には影響しませんが、ZEROFILL オプションが使用されている場合、値の表示方法に影響を与える可能性があります。
以上が「指定されたキーが長すぎます」という MySQL エラーが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。