Har du gjort SHOW TABLE STATUS
före och efter din drop+rebuild? Ändras Index_length mycket? Förmodligen inte ens med en faktor två.
Jag rekommenderar nästan aldrig att bygga om något i InnoDB. Det är inte värt det. Ett påfallande undantag har att göra med FULLTEXT
index.
Ja dummyn ALTER
kommer att bygga om indexen. Så kommer OPTIMIZE TABLE
. Båda kommer att "defragmentera" (i viss utsträckning) det sekundära indexet BTrees och huvud-BTree (som innehåller data och PRIMARY KEY
).
Statistiken kan vara mycket billigare uppdaterad med bara ANALYZE TABLE
. Även det behövs inte ofta. 5.6 har ett mycket bättre sätt att underhålla statistiken.
Om du inte redan använder innodb_file_per_table=ON
, jag föreslår att du ställer in det (SET GLOBAL ...
) och gör ALTER TABLE tbl ENGINE=InnoDB;
en sista gång.
Onlineändring
För att ändra ft_*
måste du bygga om indexet. Detta innebär en ALTER
(eller OPTIMIZE
, som implementeras som ALTER
). Nyare versioner av MySQL har ALGORITHM=INPLACE
vilket gör ALTER
har liten eller ingen inverkan på körsystemet. Men det finns begränsningar. Kontrollera manualen.
Ett alternativ till en icke-INPLACE ALTER
är pt-query-digest
eller gh-ost
. Se om någon av dem fungerar för ditt fall.
Förutom att "bygga om tabellen" kan du DROP INDEX ...
och ADD INDEX ...
. Återigen, jag vet inte om dessa fungerar för FT-index "inplace". Hur som helst, du skulle förlora användningen av det indexet under processen.