Prováděli jste SHOW TABLE STATUS
před a po vašem pádu+přestavbě? Mění se hodně index_length? Pravděpodobně ani dvakrát.
Téměř nikdy nedoporučuji nic přestavět v InnoDB. Nestojí to za to. Jasná výjimka souvisí s FULLTEXT
indexy.
Ano, figurína ALTER
přestaví indexy. Stejně tak bude OPTIMIZE TABLE
. Oba "defragmentují" (do určité míry) sekundární index BTrees a hlavní BTree (který obsahuje data a PRIMARY KEY
).
Statistik může být hodně levněji aktualizovat pomocí pouhého ANALYZE TABLE
. Ani to není často potřeba. 5.6 má mnohem lepší způsob udržování statistik.
Pokud ještě nepoužíváte innodb_file_per_table=ON
, navrhuji, abyste to nastavili (SET GLOBAL ...
) a proveďte ALTER TABLE tbl ENGINE=InnoDB;
naposledy.
Online změna
Chcete-li změnit ft_*
, musíte znovu sestavit index. To znamená ALTER
(nebo OPTIMIZE
, který je implementován jako ALTER
). Novější verze MySQL mají ALGORITHM=INPLACE
což dělá ALTER
mají malý nebo žádný dopad na běžící systém. Existují však omezení. Podívejte se do manuálu.
Alternativa k neINPLACE ALTER
je pt-query-digest
nebo gh-ost
. Podívejte se, zda některý z nich bude ve vašem případě fungovat.
Krátce než „přestavba tabulky“, můžete DROP INDEX ...
a ADD INDEX ...
. Znovu, nevím, jestli tyto fungují pro FT indexy "na místě". Každopádně byste během procesu ztratili použití tohoto indexu.