Index Write Overhead

Trade-off cốt lõi của indexing: càng nhiều index → write càng chậm, vì mỗi lần ghi phải cập nhật tất cả index liên quan.

Ví dụ cụ thể

Bảng users có 5 index:
- INSERT 1 row      → database phải thêm entry vào CẢ 5 index
- UPDATE cột email  (nằm trong 2 index) → 2 index bị cập nhật
- UPDATE cột bio    (không nằm trong index nào) → 0 index bị cập nhật
- DELETE 1 row      → xóa entry khỏi CẢ 5 index

Lưu ý tinh tế: UPDATE chỉ tốn chi phí index khi cột nằm trong index bị thay đổi.

Đừng lo lắng quá

  • Thực tế hầu hết app đọc nhiều hơn ghi rất nhiều (read:write thường 90:10 hoặc cao hơn)
  • Mỗi bảng thường chỉ cần 3-7 index
  • Chi phí write thêm hầu như không đáng kể so với lợi ích read

Bao nhiêu index là quá nhiều?

Không có con số cố định, nhưng nếu bảng có hơn 10 index và write performance giảm đáng kể → lúc nên review. Dùng query kiểm tra Unused Index để tìm và xóa index thừa.

Quy tắc dọn index trùng lặp

✅ Index (country, lastname, firstname) BAO GỒM chức năng của:
   - (country)
   - (country, lastname)
   → Xóa 2 index đơn/đôi này nếu tồn tại
 
❌ Nhưng KHÔNG BAO GỒM:
   - (country, lastname, telephone) → cột cuối khác
   - (lastname, country)            → thứ tự cột khác

Liên quan