MySQLでBLOB/TEXT型カラムにインデックスを作成してみる

投稿者: | 2015/02/26

インデックス作成

まず、MySQLで下記のHOGEテーブルのHOGEカラムにインデックスを作成してみます。

  • HOGEテーブル
| hoge  | CREATE TABLE `hoge` (
  `ID` int(11) NOT NULL,
  `HOGE` text NOT NULL,
  `VERSION` int(11) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
  • インデックス作成用SQL
# ALTER TABLE HOGE ADD INDEX hoge_idx(HOGE);

エラー発生

インデックスを張ろうとしたところ、下記のようなエラーが発生。

mysql> ALTER TABLE HOGE ADD INDEX hoge_idx(HOGE);
ERROR 1170 (42000): BLOB/TEXT column 'HOGE' used in key specification without a key length

このエラーは、MySQLがBLOB型もしくはTEXT型(これらに順ずるTINYTEXT型やLONGTEXT型を含む)のような可変長カラムでは、その先頭から最大255文字分しかインデックスできないという制約から来ているようです。

解決策

BLOB型またはTEXT型の場合は、インデックス作成時にキー長を明示してあげる必要があります。

# ALTER TABLE HOGE ADD INDEX hoge_idx(HOGE(255));

 
以上、TEXT型のカラムにインデックスを追加しようとした時に躓いた内容でした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です