Hướng dẫn tối ưu PostgreSQL cho hệ thống có 10 triệu record
Case study thực tế từ một dự án e-commerce — query từ 8 giây xuống 80ms qua việc đánh index, partition và caching.
Khách hàng của mình gặp vấn đề: query danh sách đơn hàng chậm hơn 8 giây khi data đạt 10 triệu record. Đây là quá trình mình tối ưu, đưa thời gian xuống 80ms.
**Bước 1: Đo đạc**. Dùng pg_stat_statements để tìm các query chậm nhất. Phân tích EXPLAIN ANALYZE để hiểu query plan.
**Bước 2: Đánh index đúng**. Phần lớn query chậm do thiếu index trên cột filter và join. Tạo composite index theo thứ tự (most_selective_first).
**Bước 3: Partition theo thời gian**. Bảng orders được partition theo tháng (RANGE partitioning). Query chỉ trên 1-2 partition gần nhất, thay vì scan cả bảng.
**Bước 4: Materialized view cho dashboard**. Các thống kê tổng hợp được tính trước trong materialized view, refresh định kỳ.
**Bước 5: Connection pooling**. Dùng PgBouncer ở mode transaction để giảm overhead kết nối.
Kết quả: query từ 8s → 80ms, throughput tăng 60x.
