MySQL 8 - optimalkan semua tabel + indeks

Nov 27 2020

Saya memiliki banyak tabel (InnoDB) dalam beberapa database (MySQL 8), yang saya jalankan skrip Kumpulkan Sampah, setiap hari, menghapus catatan basi yang tidak lagi diperlukan. Semua tabel memiliki indeks.

Apakah masuk akal / bermanfaat untuk mengoptimalkan semua tabel, misalnya setiap minggu, untuk meningkatkan kinerja? Jika ya, apakah ada perintah yang baik untuk dijalankan, untuk melakukannya?

Saya mencoba melakukan

sudo mysqlcheck -o --all-databases

Tetapi dapatkan pesan kesalahan berikut:

note     : Table does not support optimize, doing recreate + analyze instead
status   : OK

Jawaban

1 RickJames Nov 29 2020 at 14:36

Jangan ganggu. InnoDB sebagian besar menangani dirinya sendiri. OPTIMIZEsementara memeras beberapa ruang yang terbuang, tetapi pemborosan baru terjadi saat sisipan / dll terjadi. Manfaat kinerja OPTIMIZEhampir nihil.

1 RolandoMySQLDBA Nov 27 2020 at 04:39

Pesan tersebut normal untuk InnoDB. Anda dapat terus melakukannya.

Mesin Penyimpanan InnoDB bekerja OPTIMIZE TABLE mydb.mytable;seperti ini

ALTER TABLE mydb.mytable ENGINE=InnoDB;
ANALYZE TABLE mydb.mytable;

Saya telah menyebutkan ini selama bertahun-tahun:

  • Sep 27, 2015: Bagaimana cara mendefrag tabel di MySQL?
  • Jun 24, 2015: pedoman untuk memanggil tabel optimasi setelah tabel alter?
  • Feb 27, 2013: Apa perbedaan antara tabel optimasi dan tabel analisis di mysql
  • Aug 04, 2011: Mengoptimalkan pengaturan default InnoDB

Saya merekomendasikan melakukan analisa harian atau mingguan

sudo mysqlcheck --analyze --all-databases

Kemudian lakukan optimasi sebulan sekali atau satu triwulan sekali.