MySQL の varchar インデックスの長さ制限がバージョンごとに異なるのはなぜですか?

Susan Sarandon
リリース: 2024-11-22 00:44:14
オリジナル
529 人が閲覧しました

Why Does MySQL's varchar Index Length Limit Differ Between Versions?

MySQL varchar Index Length

SQL クエリのパフォーマンスの問題を調査中に、ユーザーは products.name 列にインデックスを追加してクエリを最適化しようとしました。 varchar(512) として定義されます。 product_name_idx (name(512)) として指定された元のインデックスは、プレフィックス インデックスとして識別されたため、並べ替えに使用されませんでした。

これに対処するために、ユーザーは name 列を切り詰めようとしました。 varchar(255) に。この変更の後、後続の EXPLAIN ステートメントは、インデックスが使用されていることを示しました。

この動作は、MySQL が UTF-8 文字の長さに関して行っている仮定に起因しています。 MySQL では、単一カラムの最大インデックス サイズは 767 バイトです。 MySQL 8.0 より前では、utf8 文字セットは 1 文字あたり最大 3 バイトに制限されていました。ただし、MySQL 8.0 ではこれが変更され、utf8mb3 は非推奨となり、1 文字あたり最大 4 バイトをサポートする utf8mb4 に置き換えられました。

8.0 より前の MySQL バージョンでは、デフォルトより大きいインデックス長を指定します。 varchar(255) 列に 255 文字を指定すると、エラーが発生します。これは、MySQL が UTF-8 の 1 文字あたり 3 バイトを想定しており、256 文字のインデックスは 767 バイトの制限を超えるためです。

MySQL 8.0 および utf8mb4 文字セットでは、1 文字あたり 3 バイトの想定が引き続き適用されます。 。ただし、圧縮された動的な行形式の導入により、インデックス キーのプレフィックスは最大 3072 バイトになる可能性があります。その結果、より多くの文字数を含む varchar カラムにインデックスを作成できるようになりました。

要約すると、以前の MySQL バージョンでは、varchar カラムのインデックス長の制限は、1 つあたり 3 バイトであると想定されていたため 255 文字でした。 UTF-8 文字と 767 バイトの最大インデックス サイズ。 MySQL 8.0 と utf8mb4 では、圧縮行フォーマットと動的行フォーマットに対してこの制限が緩和され、varchar 列でより長いインデックスを作成できるようになりました。

以上がMySQL の varchar インデックスの長さ制限がバージョンごとに異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート