Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

MySQL 5.5からの新機能、インデックスへのコメント付与を行う方法

MySQL 5.5より、インデックスへのコメント付与が可能となりました。
全文検索エンジンmroongaは、その機能を用いてFULLTEXTインデックスの生成方法を変えております。
インデックスコメントについての情報が少なかったので、紹介したいと思います。

テーブル構成

CREATE TABLE `foo_table` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

mroongaストレージエンジンを使ったサンプルでも紹介します。
これを使っていない限り、そうそうインデックスにコメントを追加する機会は無いと思います。

CREATE TABLE `mroonga_table` (
  `id` int(11) NOT NULL,
  `data` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `search_data` (`data`)
) ENGINE=mroonga DEFAULT CHARSET=utf8;

コメント付きのインデックスを追加したい

ALTER TABLE文を用いて、ADD INDEXインデックス名(インデックスを貼るカラム名) COMMENT 'コメント'という記述を行います。

ALTER TABLE foo_table 
  ADD UNIQUE INDEX `name` (name) COMMENT 'ほげほげ';

mroongaへの全文検索インデックスを追加するクエリ例は次の通りです。

ALTER TABLE mroonga_table 
  ADD FULLTEXT INDEX `search_data` (data) COMMENT 'parser "TokenMecab", normalizer "NormalizerAuto"';

コメント付きのインデックスを削除したい

ALTER TABLE文を用いて、COMMENTの中身を空にしたインデックスを作り直す事で出来ます。

ALTER TABLE foo_table 
  DROP INDEX name, 
  ADD INDEX name (name) COMMENT '';
ALTER TABLE mroonga_table 
  DROP INDEX search_data, 
  ADD FULLTEXT INDEX search_data (data) COMMENT '';

既にあるインデックスにコメントを追加したい

こちらも、2つのクエリに分けずに、1クエリで行いましょう。
理由としては、本番環境で利用しているテーブルで分けて実行すると、インデックスが無い状態が発生するためです。

ALTER TABLE foo_table 
  DROP INDEX name, 
  ADD INDEX name (name) COMMENT 'ふがふが';
ALTER TABLE mroonga_table 
  DROP INDEX search_data, 
  ADD FULLTEXT INDEX search_data (data) COMMENT 'parser "TokenMecab", normalizer "NormalizerAuto"';

あわせて読みたい

mroonga向けの資料です。