Index trong PostgreSQL: khi nào nên tạo và khi nào không
22/07/2026
Index là cấu trúc phụ giúp database tìm dòng nhanh mà không phải quét cả bảng. Nhưng index không miễn phí — mỗi index làm chậm INSERT/UPDATE và tốn dung lượng. Nghệ thuật là tạo đúng chỗ.
Khi nào NÊN tạo index
- Cột thường xuất hiện trong
WHERE,JOIN ON,ORDER BY - Khoá ngoại — PostgreSQL không tự tạo index cho FK, phải tạo tay để JOIN và xoá cascade nhanh
- Cột có tính chọn lọc cao (nhiều giá trị khác nhau), ví dụ email, mã đơn
Khi nào KHÔNG cần
- Bảng nhỏ (vài trăm dòng) — quét toàn bảng còn nhanh hơn đọc index
- Cột chọn lọc thấp như cột boolean (chỉ 2 giá trị) — index ít tác dụng
- Bảng ghi nhiều đọc ít — mỗi index thêm chi phí cho mọi lần ghi
Composite index và thứ tự cột
Index nhiều cột (a, b) phục vụ được truy vấn lọc theo a hoặc a AND b, nhưng KHÔNG phục vụ tốt truy vấn chỉ lọc theo b. Đặt cột lọc phổ biến/chọn lọc cao lên trước.
CREATE INDEX idx_orders_user_created
ON orders (user_id, created_at DESC);
Sau khi tạo, luôn kiểm chứng bằng EXPLAIN ANALYZE xem query có thực sự dùng index không.
👉 Dùng thử công cụ liên quan trên dev-hub: SQL Formatter — chạy hoàn toàn trong trình duyệt, không gửi dữ liệu lên server.