1

MYISAM は毎回完全なテーブルをロックするので、MYISAM テーブルを InnoDB に変換することを考えています。ただし、INNODB では、一意のキーと主キーが 767 バイト以内である必要があります。

だから、私はこのエラーが発生しています:-

#1071 - Specified key was too long; max key length is 767 bytes 

私の固有のキーは少し長いです。では、テーブルを INNODB に変換する最良の方法は何ですか?

これが私のテーブルを説明するスクリーンショットです

ここに画像の説明を入力

ありがとう

4

2 に答える 2

1

スクリーンショットに表示されているキーだけだとすると、問題のキーはquery_id. 300 文字の UTF8 列として、900 バイトだけを使用することになります。

インデックスをその列の一部に制限する必要があります — たとえば、最初の 100 文字でしょうか?

DROP INDEX query_id ON tablename
CREATE INDEX query_id ON tablename (query_id, position, prod(100))
于 2013-04-11T04:33:17.213 に答える
0

テーブルを変換する前に、主キー列が順番になるように順序を調整します

> ALTER TABLE tablename ORDER BY 'primary_key_column';

これにより、テーブルが事前に配置されるため、MySQL で必要な多くの再配置なしですばやく変換できます。次に、単純にテーブル エンジンを変更します。

> ALTER TABLE tablename ENGINE = INNODB;
于 2014-02-11T21:51:54.090 に答える