ホームページ >データベース >mysql チュートリアル >「指定されたキーが長すぎます」という MySQL エラーが表示されるのはなぜですか?

「指定されたキーが長すぎます」という MySQL エラーが表示されるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-09 12:24:15167ブラウズ

Why Am I Getting the MySQL Error

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 サイトの他の関連記事を参照してください。

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