Hai fatto SHOW TABLE STATUS prima e dopo il tuo drop+rebuild? Index_length cambia molto? Probabilmente nemmeno di un fattore due.
Non consiglio quasi mai di ricostruire qualcosa in InnoDB. Non ne vale la pena. Un'evidente eccezione ha a che fare con FULLTEXT indici.
Sì, il manichino ALTER ricostruirà gli indici. Così OPTIMIZE TABLE . Entrambi "deframmezzano" (in una certa misura) l'indice secondario Btrees e il principale Btree (che contiene i dati e la PRIMARY KEY ).
Le statistiche possono essere molte aggiornato in modo più economico utilizzando solo ANALYZE TABLE . Anche quello non è spesso necessario. 5.6 ha un modo molto migliore per mantenere le statistiche.
Se non stai già utilizzando innodb_file_per_table=ON , ti suggerisco di impostare quello (SET GLOBAL ... ) e fare ALTER TABLE tbl ENGINE=InnoDB; un'ultima volta.
Modifica online
Per modificare ft_* , è necessario ricostruire l'indice. Ciò implica un ALTER (o OPTIMIZE , che è implementato come ALTER ). Le versioni più recenti di MySQL hanno ALGORITHM=INPLACE che rende ALTER hanno un impatto minimo o nullo sul sistema in esecuzione. Ma ci sono dei limiti. Consulta il manuale.
Un'alternativa a un ALTER non INPLACE è pt-query-digest o gh-ost . Verifica se uno dei due funzionerà per il tuo caso.
A parte "ricostruire la tabella", puoi DROP INDEX ... e ADD INDEX ... . Ancora una volta, non so se funzionano per gli indici FT "sul posto". Ad ogni modo, perderesti l'uso di quell'indice durante il processo.