2014年1月31日金曜日

【MySQL】GEOMETRY型の列にインデックスを張る

MySQLに接続して以下のコマンドを実行するが

mysql> ALTER TABLE location ADD INDEX (lat_lon);

以下のエラーが返ってきた。

ERROR 1170 (42000): BLOB/TEXT column 'lat_lon' used in key specification without a key length

MySQLのドキュメントを読むとGEOMETRY型(BLOB型)の列にインデックスを張るには「インデックス」でなく「スペシャルインデックス」にする必要があると分かった。また、「スペシャルインデックス」が対応しているテーブルエンジンは「MyISAM」のみなので注意する。 インデックスを張ろうとしているテーブルは「InnoDB」だったので「MyISAM」に変更した。

以下のコマンドを実行すると

ALTER TABLE location ADD SPATIAL INDEX (lat_lon);

今度は問題なくGEOMETRY型の列にインデックスを張ることができた。 「EXPLAIN SELECT」を使用して先ほど張ったインデックスが効いているか確認して問題なければいい。


ちなみに「InnoDB」で「スペシャルインデックス」を張るコマンドを実行すると以下のエラーが返ってきた。

ERROR 1464 : The used table type doesn't support SPATIAL indexes

ドキュメント通り「InnoDB」には対応していないようだ。

0 件のコメント :

コメントを投稿