Haben Sie SHOW TABLE STATUS
gemacht? vor und nach deinem drop+rebuild? Ändert sich Index_length stark? Wahrscheinlich nicht einmal um den Faktor zwei.
Ich empfehle fast nie, etwas in InnoDB neu zu erstellen. Es lohnt sich nicht. Eine eklatante Ausnahme hat mit FULLTEXT
zu tun Indizes.
Ja, der Dummy ALTER
erstellt die Indizes neu. So auch OPTIMIZE TABLE
. Beide "defragmentieren" (bis zu einem gewissen Grad) die sekundären Index-BTrees und den Haupt-BTree (der die Daten und den PRIMARY KEY
enthält). ).
Die Statistiken können viel sein billiger aktualisiert mit nur ANALYZE TABLE
. Auch das wird nicht oft benötigt. 5.6 hat eine viel bessere Möglichkeit, die Statistiken zu pflegen.
Falls Sie innodb_file_per_table=ON
noch nicht verwenden , ich schlage vor, Sie setzen das (SET GLOBAL ...
) und führen Sie ALTER TABLE tbl ENGINE=InnoDB;
aus ein letztes Mal.
Online-Änderung
Um ft_*
zu ändern , müssen Sie den Index neu erstellen. Dies impliziert ein ALTER
(oder OPTIMIZE
, die als ALTER
implementiert ist ). Neuere Versionen von MySQL haben ALGORITHM=INPLACE
was ALTER
ergibt haben wenig oder keine Auswirkungen auf das laufende System. Aber es gibt Einschränkungen. Überprüfen Sie das Handbuch.
Eine Alternative zu einem Nicht-INPLACE ALTER
ist pt-query-digest
oder gh-ost
. Prüfen Sie, ob einer von ihnen für Ihren Fall geeignet ist.
Außer "die Tabelle neu aufzubauen", können Sie DROP INDEX ...
und ADD INDEX ...
. Auch hier weiß ich nicht, ob diese für FT-Indizes "inplace" funktionieren. Wie auch immer, Sie würden die Verwendung dieses Index während des Prozesses verlieren.