Heb je SHOW TABLE STATUS
. gedaan? voor en na je drop+rebuild? Verandert Index_length veel? Waarschijnlijk nog geen factor twee.
Ik raad bijna nooit aan om iets in InnoDB opnieuw op te bouwen. Het is het niet waard. Een opvallende uitzondering heeft te maken met FULLTEXT
indexen.
Ja de dummy ALTER
zal de indexen opnieuw opbouwen. Zo zal OPTIMIZE TABLE
. Beide zullen (tot op zekere hoogte) de secundaire index BTrees en de hoofd BTree (die de gegevens en de PRIMARY KEY
bevat) "defragmenteren" ).
De statistieken kunnen veel . zijn goedkoper bijgewerkt met slechts ANALYZE TABLE
. Zelfs dat is niet vaak nodig. 5.6 heeft een veel betere manier om de statistieken bij te houden.
Als u innodb_file_per_table=ON
nog niet gebruikt , stel ik voor dat je dat instelt (SET GLOBAL ...
) en doe ALTER TABLE tbl ENGINE=InnoDB;
nog een laatste keer.
Online wijzigen
Om ft_*
te wijzigen , moet u de index opnieuw opbouwen. Dit impliceert een ALTER
(of OPTIMIZE
, die is geïmplementeerd als ALTER
). Nieuwere versies van MySQL hebben ALGORITHM=INPLACE
waardoor ALTER
hebben weinig of geen invloed op het lopende systeem. Maar er zijn beperkingen. Raadpleeg de handleiding.
Een alternatief voor een niet-INPLACE ALTER
is pt-query-digest
of gh-ost
. Kijk of een van beide voor jouw geval werkt.
In plaats van "de tabel opnieuw opbouwen", kunt u DROP INDEX ...
en ADD INDEX ...
. Nogmaals, ik weet niet of deze werken voor FT-indexen "inplace". Hoe dan ook, je zou het gebruik van die index tijdens het proces verliezen.