Bạn đã làm SHOW TABLE STATUS
chưa trước và sau khi bạn thả + xây dựng lại? Index_length có thay đổi nhiều không? Có lẽ không bằng một hệ số hai.
Tôi hầu như không bao giờ khuyên bạn nên xây dựng lại bất cứ thứ gì trong InnoDB. Nó không đáng. Một ngoại lệ rõ ràng liên quan đến FULLTEXT
chỉ mục.
Vâng, ALTER
giả sẽ xây dựng lại các chỉ mục. Vì vậy, OPTIMIZE TABLE
sẽ . Cả hai sẽ "chống phân mảnh" (ở một mức độ nào đó) BTrees chỉ mục phụ và BTree chính (chứa dữ liệu và PRIMARY KEY
).
Số liệu thống kê có thể nhiều được cập nhật với giá rẻ hơn chỉ bằng cách sử dụng ANALYZE TABLE
. Thậm chí điều đó không thường xuyên cần thiết. 5.6 có một cách tốt hơn nhiều để duy trì số liệu thống kê.
Nếu bạn chưa sử dụng innodb_file_per_table=ON
, Tôi khuyên bạn nên đặt điều đó (SET GLOBAL ...
) và thực hiện ALTER TABLE tbl ENGINE=InnoDB;
một lần cuối cùng.
Thay đổi trực tuyến
Để thay đổi ft_*
, bạn cần phải xây dựng lại chỉ mục. Điều này ngụ ý một ALTER
(hoặc OPTIMIZE
, được triển khai dưới dạng ALTER
). Các phiên bản MySQL mới hơn có ALGORITHM=INPLACE
điều này tạo nên ALTER
có ít hoặc không ảnh hưởng đến hệ thống đang chạy. Nhưng, có những hạn chế. Kiểm tra hướng dẫn sử dụng.
Một giải pháp thay thế cho ALTER
không INPLACE là pt-query-digest
hoặc gh-ost
. Xem liệu một trong hai cách này có phù hợp với trường hợp của bạn hay không.
Ngoài "xây dựng lại bảng", bạn có thể DROP INDEX ...
và ADD INDEX ...
. Một lần nữa, tôi không biết liệu những thứ này có hiệu quả với các chỉ số FT "tại chỗ" hay không. Dù sao, bạn sẽ mất việc sử dụng chỉ mục đó trong quá trình này.