ホームページ  >  記事  >  データベース  >  MySQL VARCHAR(512) インデックスが使用されないのはなぜですか?

MySQL VARCHAR(512) インデックスが使用されないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-25 03:56:12376ブラウズ

Why Isn't My MySQL VARCHAR(512) Index Being Used?

MySQL VARCHAR インデックスの長さ

MySQL テーブルのインデックスの最大長は 767 バイトです。これは列ごとであるため、複合インデックスは合計で 767 バイトを超えることはできません。ただし、このルールにはいくつかの例外があります。

  • innodb_large_prefix 構成オプションを有効にすると、DYNAMIC または COMPRESSED 行形式を使用する InnoDB テーブルのインデックス長制限は 3072 バイトに引き上げられます。
  • utf8 文字セットの場合、MySQL は 1 文字あたり 3 バイトを想定します。したがって、インデックスに登録できる最大文字数は 255 (767 / 3) です。

特定のケース:

  • 製品テーブルには、varchar(512) 型の名前列があります。
  • この列にインデックスを作成しました。 ALTER TABLE products ADD INDEX (name(512)).

作成したインデックスは、最大インデックス長の 767 バイトを超えているため、使用されていません。これは、MySQL が UTF-8 文字あたり 3 バイト、および 512 文字 * 3 バイト/文字 = 1536 バイトを想定しているためです。

この問題を解決するには、次のことができます。

  • インデックスの長さを 255 文字に減らすか、

    ALTER TABLE products ADD INDEX (name(255));
  • innodb_large_prefix 構成オプションを有効にし、DYNAMIC または COMPRESSED 行形式を使用します。

    SET innodb_large_prefix = ON;
    
    ALTER TABLE products ROW_FORMAT=COMPRESSED;

追加注:

  • 主に ASCII 文字 (1 文字あたり 1 バイト) を格納する場合、最大 767 バイトのインデックスを指定できます。
  • utf8mb4 文字セットを使用する 4 バイト文字。ただし、これにより、インデックスに登録できる最大文字数がさらに減ります。

以上がMySQL VARCHAR(512) インデックスが使用されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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