Nên index khi cột:
- Xuất hiện trong WHERE, JOIN, ORDER BY, GROUP BY của truy vấn chạy thường xuyên.
- Có độ chọn lọc (selectivity) cao — nhiều giá trị phân biệt (email, user_id) nên index lọc bỏ được nhiều hàng.
- Là foreign key (tăng tốc join và kiểm ràng buộc).
Không nên (hoặc cẩn trọng) khi:
- Bảng ghi rất nhiều — mỗi index làm chậm INSERT/UPDATE/DELETE và tốn dung lượng.
- Cột độ chọn lọc thấp (vd boolean, giới tính) — index gần như vô dụng, DB vẫn chọn quét bảng.
- Bảng nhỏ — quét toàn bảng còn nhanh hơn đi index.
- Index trùng lặp/không bao giờ được query dùng.
Nguyên tắc: index dựa trên mẫu truy vấn thực tế (đo bằng EXPLAIN), không phải "cứ cột nào cũng index".