Harap diingat bahwa OPTIMIZE TABLE tidak melakukan defragmentasi. Secara internal, OPTIMIZE TABLE melakukan beberapa operasi (menyalin data ke file temp, membuat ulang indeks, menghitung ulang statistik indeks). Bahkan, contoh yang saya miliki dapat dilakukan secara manual seperti yang ditunjukkan.
Contoh: Jika Anda mengoptimalkan mydb.mytable
, Anda memasukkan perintah ini:
OPTIMIZE TABLE mydb.mytable;
Perhatikan bahwa mysql melakukan sesuatu berikut di bawah tenda:
CREATE TABLE mydb.mytable2 LIKE mydb.mytable;
ALTER TABLE mydb.mytable2 DISABLE KEYS;
INSERT INTO mydb.mytable2 SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable2 ENABLE KEYS;
DROP TABLE mydb.mytable;
ALTER TABLE mydb.mytable2 RENAME mydb.mytable;
ANALYZE TABLE mydb.mytable;
Ini cukup berguna untuk tabel yang mengalami UPDATE dan DELETE volume tinggi
Melakukan ini dapat mencapai dua hal
Cegah mysql dari melihat melalui fragmen dalam tabel dalam upaya memuat data ke dalam fragmen berukuran tepat. Menghilangkan fragmen-fragmen ini akan mengurangi operasi ini.
Menghitung ulang statistik indeks membantu Pengoptimal Permintaan MySQL menyusun rencana EXPLAIN yang lebih baik. Jika tidak, kueri dapat menurun dalam waktu pelaksanaan karena Pengoptimal Kueri MySQL memutuskan untuk mengambil tebakan yang salah pada paket EXPLAIN. Ini akan menjadi gejala yang pasti dari tabel yang memiliki volume tinggi UPDATE dan HAPUS.
CAVEAT
Sehubungan dengan caching, caching melakukan penyelaman dengan cepat karena melakukan pemindaian tabel penuh. Untuk halaman indeks MyISAM mengalir masuk dan keluar dari Cache Kunci MyISAM. Untuk InnoDB, halaman data dan indeks mengalir masuk dan keluar dari Pool Buffer InnoDB.