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.