ホームページ  >  記事  >  データベース  >  MySQL インデックスのインデックス長の問題の詳細な紹介

MySQL インデックスのインデックス長の問題の詳細な紹介

黄舟
黄舟オリジナル
2017-03-04 15:06:472014ブラウズ

MySQL の単一テーブルごとに作成されるインデックスの長さは制限されており、ストレージ エンジンごとにテーブルに異なる制限があります。

MyISAM テーブルでは、結合インデックスを作成する場合、作成されるインデックスの長さは 1000 を超えることはできません。ここでのインデックスの長さの計算は、テーブル フィールドで設定された長さに基づいてスカラーであることに注意してください。次に例を示します。

create table test(id int,name1 varchar(300),name2 varchar(300),name3 varchar(500))charset=latin1 engine=myisam;
create index test_name on test(name1,name2,name3);

この時点で報告されたエラー:

Specified key was too long;max key length is 1000 bytes.

変更されたテーブル構造:

alter table test convert to charset utf8;
  create index test_name3 on test(name3).

現時点での警告:

Specified key was too long;max key length is 1000 bytes.

しかし、インデックスは正常に作成されました。テーブル構造を見ると、作成されたインデックスがプレフィックス インデックスであることがわかります:

‘key test_name3(name3(333))’


結論は次のとおりです: myisam テーブルの場合、結合インデックスを作成する場合、作成されるインデックスの長さの合計は 1000 バイトを超えることはできません。エラーが報告され、作成は失敗します。myisam の単一列インデックスの場合、最大長は 1000 を超えるとアラームが発生しますが、作成は成功し、最終的にプレフィックス インデックスが作成されます。 333 バイトが使用されます)。

Innodb テーブルで複合インデックスを作成します:

create table test1(id int,name1 varchar(300),name2 varchar(300),name3 varchar(500))charset=latin1 engine=innodb;
  create index test1_name on test(name1,name2,name3);

これで

warning:Specified key was too long;max key length is 767 bytes.

alter table test1 convert to charset utf8;
  create index test1_name3 on test(name3).

が得られます。 結論は次のとおりです: innodb で複合インデックスを作成するには、もし各列の長さが 767 バイトを超えない場合、すべての列の長さの合計は計算されません。767 バイトを超える場合、インデックスは正常に作成されますが、列が 767 バイトを超えると、アラームが発生します。プレフィックス インデックスが取得されます。InnoDB の単一列インデックスの場合、767 を超えると警告が表示され、最終的にインデックスは正常に作成され、プレフィックス インデックスが取得されます (最初の 255 バイトが取得されます)。取られました)。



上記は、MySQL インデックスのインデックス長の問題について詳しく説明したもので、さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


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