Theo Hướng dẫn chứng nhận MySQL:
Câu lệnh TỐI ƯU HÓA làm sạch bảng MyISAM bằng cách chống phân mảnh. Điều này liên quan đến việc lấy lại không gian không sử dụng do xóa và cập nhật, và các bản ghi liên kết đã bị phân tách và lưu trữ không liên tục. TỐI ƯU BẢNG cũng sắp xếp các trang chỉ mục nếu chúng không theo thứ tự và cập nhật số liệu thống kê chỉ mục
Cũng hoạt động cho các bảng InnoDB, nhưng ánh xạ tới ALTER TABLE, để xây dựng lại bảng. Điều này cập nhật số liệu thống kê chỉ mục và giải phóng không gian trong chỉ mục cụm.
Vì vậy, trong trường hợp của InnoDB:
Innodb tuân thủ ACID, bảng tối ưu hóa chỉ cần sao chép tất cả các bản ghi vào một bảng mới
- Nếu các trang chỉ mục không được sắp xếp, sắp xếp chúng,
- Nếu số liệu thống kê của bảng không cập nhật (và không thể thực hiện sửa chữa bằng cách sắp xếp chỉ mục), hãy cập nhật chúng.
- Nếu bảng đã bị xóa hoặc tách hàng, hãy sửa chữa bảng.
Và nếu bạn cố giết nó khi nó chạy, bạn sẽ không mất bất kỳ hồ sơ nào.
Ngoài ra, trường hợp của InnoDB với innodb_defragment=1
, sẽ không có ROLLBACK được yêu cầu, vì trong trường hợp OPTIMIZE TABLE
này là tăng dần.