Tôi đã tạo kịch bản 'đơn giản' này:
set @tables_like = null;
set @optimize = null;
set @show_tables = concat("show tables where", ifnull(concat(" `Tables_in_", database(), "` like '", @tables_like, "' and"), ''), " (@optimize:=concat_ws(',',@optimize,`Tables_in_", database() ,"`))");
Prepare `bd` from @show_tables;
EXECUTE `bd`;
DEALLOCATE PREPARE `bd`;
set @optimize := concat('optimize table ', @optimize);
PREPARE `sql` FROM @optimize;
EXECUTE `sql`;
DEALLOCATE PREPARE `sql`;
set @show_tables = null, @optimize = null, @tables_like = null;
Để chạy nó, chỉ cần dán nó vào bất kỳ IDE SQL nào được kết nối với cơ sở dữ liệu của bạn.
Lưu ý: mã này KHÔNG hoạt động trên phpmyadmin.
Làm thế nào nó hoạt động
Nó chạy một show tables
tuyên bố và lưu trữ nó trong một tuyên bố chuẩn bị. Sau đó, nó chạy một optimize table
trong bộ đã chọn.
Bạn có thể kiểm soát bảng nào để tối ưu hóa bằng cách đặt một giá trị khác trong var @tables_like
(ví dụ set @tables_like = '%test%';
:).