Sudahkah Anda melakukan SHOW TABLE STATUS
sebelum dan sesudah drop+rebuild Anda? Apakah Index_length banyak berubah? Mungkin bahkan bukan dengan dua faktor.
Saya hampir tidak pernah merekomendasikan membangun kembali apa pun di InnoDB. Itu tidak layak. Pengecualian mencolok ada hubungannya dengan FULLTEXT
indeks.
Ya, ALTER
dummy akan membangun kembali indeks. Begitu juga dengan OPTIMIZE TABLE
. Keduanya akan "mendefrag" (sampai batas tertentu) indeks sekunder Btree dan Btree utama (yang berisi data dan PRIMARY KEY
).
Statistiknya bisa banyak lebih murah diperbarui hanya dengan menggunakan ANALYZE TABLE
. Bahkan itu tidak sering dibutuhkan. 5.6 memiliki cara yang jauh lebih baik untuk mempertahankan statistik.
Jika Anda belum menggunakan innodb_file_per_table=ON
, saya sarankan Anda mengaturnya (SET GLOBAL ...
) dan lakukan ALTER TABLE tbl ENGINE=InnoDB;
untuk terakhir kalinya.
Perubahan online
Untuk mengubah ft_*
, Anda perlu membangun kembali file index. Ini menyiratkan ALTER
(atau OPTIMIZE
, yang diimplementasikan sebagai ALTER
). Versi MySQL yang lebih baru memiliki ALGORITHM=INPLACE
yang membuat ALTER
memiliki sedikit atau tidak berdampak pada sistem yang sedang berjalan. Tapi, ada batasannya. Periksa manualnya.
Alternatif untuk ALTER
non-INPLACE adalah pt-query-digest
atau gh-ost
. Lihat apakah salah satu dari mereka akan bekerja untuk kasus Anda.
Singkat dari "membangun kembali tabel", Anda dapat DROP INDEX ...
dan ADD INDEX ...
. Sekali lagi, saya tidak tahu apakah ini berfungsi untuk indeks FT "di tempat". Bagaimanapun, Anda akan kehilangan penggunaan indeks itu selama proses tersebut.