🚀 Hơn 5 năm kinh nghiệm Backend — Laravel, Node.js, Vue.js, AWS. Mình luôn sẵn sàng cho cơ hội mới!

Blogs

Rebuild Index và UPDATE STATISTICS trong MySQL

K
Võ Cao Kỳ
2025/03/04·5 phút đọc

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 IndexUPDATE 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

index.sql
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

index.sql
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+)

index.sql
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ê

index.sql
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

index.sh
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+)

index.sql
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ợpDùng Rebuild IndexDù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ặc ALTER TABLE ENGINE=InnoDB để rebuild index.


Cảm ơn tài liệu tham khảo từ 💓

Chia sẻ bài viết: Facebook

Lưu ý: Bài viết dựa trên kinh nghiệm cá nhân — hãy xem như nguồn tham khảo, không phải hướng dẫn tuyệt đối. Công nghệ luôn thay đổi và mỗi dự án có đặc thù riêng, bạn nên kiểm tra và điều chỉnh cho phù hợp. Có góp ý hay câu hỏi, đừng ngần ngại chia sẻ nhé!

GọiGửi email