http://d.hatena.ne.jp/hirose31/20100105/1262681800
http://d.hatena.ne.jp/sh2/20091120
http://bugs.mysql.com/bug.php?id=47622

みごとにこれ。

ALTER TABLE hoge DROP KEY hoge_id;
ALTER TABLE hoge ADD UNIQUE (hoge_id);

はいエラー。

エラーはでてるが、このパターンだととりあえず index は使われてるっぽい。実測とexplainレベルでしか確認しようがないけど。

対策

SET OLD_ALTER_TABLE=ON;

ALTER TABLE hoge DROP KEY hoge_id;
ALTER TABLE hoge ADD UNIQUE (hoge_id);

たぶんこれ。

でもマスタースレーブ構成で伝搬されたALTERも OLD にする必要があり、その場合は全スレーブで

SET GLOBAL OLD_ALTER_TABLE=ON;

してから上のクエリーをマスターに投げればいいのか?

ここまだ未検証。