Правили ли сте 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 индекси "на място". Така или иначе ще загубите използването на този индекс по време на процеса.