#1. Bài toán
Bảng orders có 50 triệu dòng. Query SELECT * FROM orders WHERE created_at > '2026-01-01' quét qua 50 triệu dòng gây treo hệ thống.
#2. Giải pháp: Partitioning
Thay vì chia nhỏ DB ra nhiều server (Sharding), bạn chia nhỏ bảng thành các phân vùng vật lý trên cùng 1 server.
- Range Partitioning: Chia theo khoảng giá trị (vd: theo năm). MySQL sẽ tự động bỏ qua các partition không liên quan khi quét query.
#3. Lợi ích
- Query performance: Quét nhanh hơn hẳn vì chỉ cần đọc tập dữ liệu nhỏ.
- Maintenance: Dễ dàng xóa dữ liệu cũ (chỉ cần drop 1 partition thay vì chạy
DELETEhàng triệu dòng gây lock bảng).
#4. Câu hỏi nhanh
Câu hỏi: Partitioning khác Sharding thế nào? Trả lời: Partitioning nằm trên 1 server, Sharding nằm trên nhiều server. Partitioning giúp tối ưu I/O local, Sharding giúp giải quyết giới hạn phần cứng của 1 máy.