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 tablestuyên bố và lưu trữ nó trong một tuyên bố chuẩn bị. Sau đó, nó chạy một optimize tabletrong 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%';:).