Você está fazendo
SHOW TABLE STATUS antes e depois do seu drop+rebuild? O Index_length muda muito? Provavelmente nem por um fator de dois. Eu quase nunca recomendo reconstruir nada no InnoDB. Não vale a pena. Uma exceção gritante tem a ver com
FULLTEXT índices. Sim, o
ALTER fictício irá reconstruir os índices. Assim como OPTIMIZE TABLE . Ambos irão "desfragmentar" (até certo ponto) o índice secundário BTrees e o BTree principal (que contém os dados e a PRIMARY KEY ). As estatísticas podem ser muito atualizado mais barato usando apenas
ANALYZE TABLE . Mesmo isso nem sempre é necessário. 5.6 tem uma maneira muito melhor de manter as estatísticas. Se você ainda não estiver usando
innodb_file_per_table=ON , sugiro que você defina isso (SET GLOBAL ... ) e faça ALTER TABLE tbl ENGINE=InnoDB; uma última vez. Alteração on-line
Para alterar
ft_* , você precisa reconstruir o índice. Isso implica um ALTER (ou OPTIMIZE , que é implementado como ALTER ). Versões mais recentes do MySQL têm ALGORITHM=INPLACE o que torna ALTER têm pouco ou nenhum impacto no sistema em execução. Mas, existem limitações. Verifique o manual. Uma alternativa para um
ALTER não INPLACE é pt-query-digest ou gh-ost . Veja se algum deles funcionará para o seu caso. Além de "reconstruir a tabela", você pode
DROP INDEX ... e ADD INDEX ... . Novamente, não sei se eles funcionam para índices FT "inplace". De qualquer forma, você perderia o uso desse índice durante o processo.