Har du lavet SHOW TABLE STATUS
før og efter din drop+rebuild? Ændres Index_length meget? Sandsynligvis ikke engang med en faktor to.
Jeg anbefaler næsten aldrig at genopbygge noget i InnoDB. Det er ikke det værd. En iøjnefaldende undtagelse har at gøre med FULLTEXT
indekser.
Ja dummyen ALTER
vil genopbygge indekserne. Det samme vil OPTIMIZE TABLE
. Begge vil "defragmentere" (til en vis grad) det sekundære indeks BTrees og det primære BTree (som indeholder dataene og PRIMARY KEY
).
Statistikken kan være meget billigere opdateret ved kun at bruge ANALYZE TABLE
. Selv det er ikke ofte nødvendigt. 5.6 har en meget bedre måde at vedligeholde statistikken på.
Hvis du ikke allerede bruger innodb_file_per_table=ON
, jeg foreslår, at du indstiller det (SET GLOBAL ...
) og gør ALTER TABLE tbl ENGINE=InnoDB;
en sidste gang.
Online ændring
For at ændre ft_*
, skal du genopbygge indekset. Dette indebærer en ALTER
(eller OPTIMIZE
, som er implementeret som ALTER
). Nyere versioner af MySQL har ALGORITHM=INPLACE
hvilket gør ALTER
har ringe eller ingen indflydelse på det kørende system. Men der er begrænsninger. Tjek manualen.
Et alternativ til en ikke-INPLACE ALTER
er pt-query-digest
eller gh-ost
. Se, om en af dem vil fungere for din sag.
Ud over at "genopbygge tabellen", kan du DROP INDEX ...
og ADD INDEX ...
. Igen, jeg ved ikke, om disse virker for FT-indekser "inplace". Uanset hvad, ville du miste brugen af det indeks under processen.