Rebuild Index và UPDATE STATISTICS trong MySQL
2025/03/04
Khi làm việc với cơ sở dữ liệu MySQL, hiệu suất truy vấn có thể bị ảnh hưởng nếu index bị phân mảnh hoặc thống kê dữ liệu không chính xác. Hai phương pháp phổ biến để tối ưu hóa hiệu suất là Rebuild Index và UPDATE STATISTICS. Trong bài viết này, chúng ta sẽ tìm hiểu về hai phương pháp này và cách sử dụng chúng trong MySQL.
Tại sao cần Rebuild Index và UPDATE STATISTICS?
Index bị phân mảnh
- Khi dữ liệu trong bảng thay đổi liên tục (INSERT, UPDATE, DELETE), index có thể bị phân mảnh.
- Phân mảnh index làm giảm hiệu suất truy vấn do cần nhiều thao tác I/O hơn để truy xuất dữ liệu.
Thống kê dữ liệu không chính xác
- MySQL sử dụng thống kê để xác định chiến lược truy vấn tối ưu.
- Nếu thống kê cũ không chính xác, Query Optimizer có thể chọn kế hoạch truy vấn không hiệu quả.
Rebuild Index trong MySQL
Rebuild Index giúp sắp xếp lại dữ liệu trong index, giảm phân mảnh và tối ưu hóa truy vấn.
Cách thực hiện Rebuild Index
Dùng ALTER TABLE để rebuild toàn bộ index
ALTER TABLE your_table_name ENGINE=InnoDB;
💡 Mẹo:
Câu lệnh này sẽ rebuild toàn bộ bảng, bao gồm cả index.
Dùng OPTIMIZE TABLE để tối ưu index
OPTIMIZE TABLE your_table_name;
💡 Mẹo:
Tương tự
ALTER TABLE ENGINE=InnoDB
, nhưng chỉ hoạt động tốt với InnoDB và MyISAM.
Dùng ALTER TABLE để rebuild index cụ thể (MySQL 8.0+)
ALTER TABLE your_table_name DROP INDEX index_name, ADD INDEX index_name (column_name);
💡 Mẹo:
Cách này chỉ nên dùng khi bạn muốn rebuild một index cụ thể.
UPDATE STATISTICS trong MySQL
UPDATE STATISTICS giúp cập nhật lại thống kê dữ liệu để Query Optimizer đưa ra kế hoạch truy vấn tốt hơn.
Cách thực hiện UPDATE STATISTICS
Dùng ANALYZE TABLE để cập nhật thống kê
ANALYZE TABLE your_table_name;
💡 Mẹo:
Câu lệnh này cập nhật thống kê của bảng, giúp Query Optimizer có dữ liệu mới nhất.
Dùng mysqlcheck để cập nhật tất cả bảng trong database
mysqlcheck -o --auto-repair -u root -p your_database_name
💡 Mẹo:
Tùy chọn
-o
tối ưu bảng,--auto-repair
sửa lỗi nếu có.
Cập nhật thống kê cho từng index cụ thể (MySQL 8.0+)
ANALYZE TABLE your_table_name UPDATE HISTOGRAM ON column_name;
💡 Mẹo:
Dùng khi muốn cập nhật histogram cho từng cột để Query Optimizer tối ưu truy vấn tốt hơn.
Khi nào nên dùng Rebuild Index và UPDATE STATISTICS?
Trường hợp | Dùng Rebuild Index | Dùng UPDATE STATISTICS |
---|---|---|
Sau khi xóa hoặc cập nhật nhiều dữ liệu | ✅ | ✅ |
Khi thấy truy vấn chạy chậm hơn bình thường | ✅ | ✅ |
Khi index bị phân mảnh nặng | ✅ | ❌ |
Khi cần cập nhật thống kê dữ liệu | ❌ | ✅ |
Kết luận
- Rebuild Index giúp giảm phân mảnh, cải thiện tốc độ truy vấn.
- UPDATE STATISTICS giúp Query Optimizer đưa ra kế hoạch truy vấn tốt hơn.
- Kết hợp cả hai để đảm bảo hiệu suất tối ưu cho MySQL.
💡 Mẹo:
Nếu bạn thấy truy vấn chậm, hãy thử
ANALYZE TABLE
trước. Nếu vẫn chậm, hãy thửOPTIMIZE TABLE
hoặcALTER TABLE ENGINE=InnoDB
để rebuild index.
Cảm ơn tài liệu tham khảo từ 💓
Lưu ý: Tất cả các bài viết trên blog này được viết dựa trên kinh nghiệm cá nhân và quá trình tìm hiểu của mình. Mình hy vọng chúng có thể giúp ích cho bạn trong công việc và học tập, nhưng hãy xem đây như một nguồn tham khảo thay vì hướng dẫn tuyệt đối. Công nghệ luôn thay đổi, mỗi dự án có những đặc thù riêng, vì vậy bạn nên kiểm tra, thử nghiệm và điều chỉnh cho phù hợp với nhu cầu thực tế. Nếu có góp ý hay câu hỏi, đừng ngần ngại chia sẻ nhé!