Czy robisz SHOW TABLE STATUS? przed i po upuszczeniu i odbudowie? Czy Index_length bardzo się zmienia? Prawdopodobnie nie dwa razy.
Prawie nigdy nie polecam przebudowy niczego w InnoDB. To nie jest tego warte. Rażący wyjątek ma związek z FULLTEXT indeksy.
Tak, atrapa ALTER odbuduje indeksy. Tak samo OPTIMIZE TABLE . Oba "defragmentują" (do pewnego stopnia) indeks dodatkowy BTrees i główny BTree (zawierający dane i PRIMARY KEY ).
Statystyki mogą być dużo taniej aktualizowane przy użyciu tylko ANALYZE TABLE . Nawet to nie jest często potrzebne. 5.6 ma znacznie lepszy sposób na utrzymanie statystyk.
Jeśli jeszcze nie używasz innodb_file_per_table=ON , proponuję ustawić to (SET GLOBAL ... ) i wykonaj ALTER TABLE tbl ENGINE=InnoDB; ostatni raz.
Zmiana online
Aby zmienić ft_* , musisz odbudować indeks. Oznacza to ALTER (lub OPTIMIZE , który jest zaimplementowany jako ALTER ). Nowsze wersje MySQL mają ALGORITHM=INPLACE co sprawia, że ALTER mają niewielki lub żaden wpływ na działający system. Ale są ograniczenia. Sprawdź instrukcję.
Alternatywa dla nie INPLACE ALTER to pt-query-digest lub gh-ost . Sprawdź, czy któryś z nich sprawdzi się w Twojej sprawie.
Krótko mówiąc "odbudowa tabeli", możesz DROP INDEX ... i ADD INDEX ... . Znowu nie wiem, czy działają one dla indeksów FT „w miejscu”. W każdym razie stracisz możliwość korzystania z tego indeksu podczas procesu.