🤖 AI vẫn chưa thể thay thế mình đâu, bạn có thể khám phá những gì mình đang làm tại đây!

Rebuild Index và UPDATE STATISTICS trong MySQL

K
Võ Cao Kỳ

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 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ừ 💓


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é!

Copyright © 2025 Vo Cao Ky

Cảm ơn Nuxt.js, ShadcnUI đã giúp mình build website này.