ホームページ >データベース >mysql チュートリアル >MySQL は UTF-8 カラムの VARCHAR インデックス長をどのように処理しますか?

MySQL は UTF-8 カラムの VARCHAR インデックス長をどのように処理しますか?

DDD
DDDオリジナル
2024-11-21 03:35:11357ブラウズ

How Does MySQL Handle VARCHAR Index Length for UTF-8 Columns?

UTF-8 カラムの MySQL varchar インデックス長について

MySQL では、varchar(n) カラムのインデックス長は次のように指定されます。バイトではなく文字です。ただし、MySQL は、各 UTF-8 文字が 3 バイトを占めると想定します。これは、指定されたインデックス長が n の varchar 列の場合、インデックスを作成できる実際の最大バイト数は 3n であることを意味します。

これを内訳すると、

  • UTF-8 文字サイズ: UTF-8 文字は、1 から 4 までの可変長にすることができます。 bytes.
  • MySQL の仮定: MySQL は、UTF-8 文字の最大サイズが 3 バイトであると仮定します。
  • インデックス長変換: varchar の場合カラムの場合、MySQL は次の式を使用して、指定されたインデックス長 (文字数) を最大インデックス サイズ (バイト数) に変換します。 3n、n は文字単位のインデックス長です。

UTF-8 列のインデックス サイズへの影響

1 文字あたり 3 バイトの仮定に基づく, MySQL では、UTF-8 文字を含む varchar カラムのインデックス サイズに実質的な制限が課されています。 set.

  • 最大インデックス サイズ: 単一の varchar 列の最大インデックス サイズは 255 文字で、最大 767 バイト (255 x 3) になります。
  • 複合インデックス: varchar 列を含む複合インデックスの場合、合計インデックス サイズは 767 バイトを超えてはなりません。

動的および圧縮行フォーマットに関する考慮事項

MySQL バージョン 8.0 以降では、最大インデックスを増やすことができる可能性があります。 DYNAMIC または COMPRESSED 行形式を使用した InnoDB テーブルの varchar 列のサイズ。これらの行形式では、より長いプレフィックス長が可能になり、事実上、インデックス サイズの制限が増加します。ただし、この最適化は、5.5.27 などの以前の MySQL バージョンではサポートされていません。

インデックス設計の推奨事項

UTF-8 を使用して varchar カラムのインデックスを設計する場合

  • インデックスの長さをできるだけ短く保つことをお勧めします。ストレージ容量とパフォーマンスへの影響を最小限に抑えることが可能です。
  • 最大長 (例: varchar(512)) の代わりに短い文字長 (例: varchar(128)) を使用することを検討してください。
  • 主に 1 バイト文字を格納することが予想される場合は、インデックスの長さを少し長くして実験することもできますが、潜在的なバイト数に留意してください。制限。
  • インデックスの使用状況を監視して、インデックスが効果的に使用され、パフォーマンスの問題が発生していないことを確認します。

以上がMySQL は UTF-8 カラムの VARCHAR インデックス長をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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