Правили ли сте SHOW TABLE STATUS преди и след вашето drop+rebuild? Променя ли се много Index_length? Вероятно не дори с коефициент два.
Почти никога не препоръчвам възстановяване на нещо в InnoDB. Не си струва. Фрапиращо изключение е свързано с FULLTEXT индекси.
Да фиктивният ALTER ще възстанови индексите. Така ще OPTIMIZE TABLE . И двете ще "дефрагментират" (до известна степен) вторичния индекс BTrees и основния BTree (който съдържа данните и PRIMARY KEY ).
Статистиката може да бъде много по-евтино актуализирано с помощта само на ANALYZE TABLE . Дори това не е необходимо често. 5.6 има много по-добър начин за поддържане на статистиката.
Ако все още не използвате innodb_file_per_table=ON , предлагам да зададете това (SET GLOBAL ... ) и направете ALTER TABLE tbl ENGINE=InnoDB; за последен път.
Онлайн промяна
За да промените ft_* , трябва да възстановите индекса. Това предполага ALTER (или OPTIMIZE , който се реализира като ALTER ). По-новите версии на MySQL имат ALGORITHM=INPLACE което прави ALTER имат малко или никакво влияние върху работещата система. Но има ограничения. Проверете ръководството.
Алтернатива на не-INPLACE ALTER е pt-query-digest или gh-ost . Вижте дали някой от тях ще работи за вашия случай.
С изключение на "преизграждане на таблицата", можете да DROP INDEX ... и ADD INDEX ... . Отново, не знам дали тези работят за FT индекси "на място". Така или иначе ще загубите използването на този индекс по време на процеса.