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.