// Bạn đã đúng chỗ

Postgres Index — Index từ Bản Chất

Đây là khóa học về PostgreSQL index, nhưng phần lớn nội dung là về tại sao, không phải cái gì.

Hiểu từ gốc: planner nghĩ gì, khi nào index thắng/thua, MVCC × index, write amplification, EXPLAIN ANALYZE thực chiến.

11
Modules
All levels
Trình độ
Thanh toán VietQRXem bảng giáĐã hoàn tất nội dung

// Cách dạy

Không học cú pháp. Học cách planner nghĩ.

Không học: “loại index nào dùng khi nào”. Học: “planner đang cân nhắc gì, và tại sao nó quyết định vậy”.

Mỗi bài đều bắt đầu bằng một câu hỏi thật từ production. Câu trả lời đi từ EXPLAIN thật, từ cost estimate thật, không phải từ slide lý thuyết.

Học xong bạn không nhớ “B-tree dùng cho equality”. Bạn sẽ nhìn được một query, đoán được planner đang nghĩ gì, và tự suy ra index nào, hoặc tại sao không cần index.

// Curriculum

Nội dung khóa học

11 modules · 41 bài học · cập nhật thường xuyên theo feedback học viên.

// Một đoạn thật trong bài

Đây là tone và depth của khóa học

Trích phần 4.3 · HOT Update. Một câu SQL, hai hệ quả ngược nhau, và một aha moment mà học viên hay re-read 2-3 lần.

phần 4.3 · hot update
-- Cùng một câu UPDATE.
-- Hai cấu hình index khác nhau.
-- Hai hệ quả ngược nhau.

UPDATE users SET last_seen = now()
WHERE id = 1;
Trường hợp A

last_seen không có index

Postgres dùng HOT (Heap Only Tuple). Chỉ update heap, không đụng index page nào.

Trường hợp B

last_seen có index

HOT không apply. Phải update index page → write amplification thật.

Câu trên nhiều fresher cũng nghe, nhưng hiểu vì sao ở mức bản chất thì chưa. Phần 4 sẽ đào từ gốc: MVCC, version trong heap, và cách Postgres tránh index write.

// Aha

“Index nhiều không chỉ tốn read path, nó giết update path.”

Đó là lý do cột hay update (last_seen, updated_at, view_count) cần cân nhắc kỹ trước khi tạo index.

// Bạn sẽ làm được gì

6 việc cụ thể sau khoá

Không phải "hiểu sâu hơn" mơ hồ. Đây là những việc bạn sẽ làm được khi bắt gặp query chậm ngoài production.

  • Mở EXPLAIN ANALYZE bất kỳ, đọc từng node bottom-up và chỉ ra được node estimate sai nhất.
  • Chọn được composite index order đúng cho query thật, không phải đoán order rồi thử.
  • Giải thích tại sao planner chọn Seq Scan dù có index, và biết cách force plan đúng khi cần.
  • Đọc pg_statistic, hiểu selectivity, biết khi nào cần chạy ANALYZE thay vì thêm index.
  • Tính được write amplification khi thêm index vào cột update nhiều (last_seen, updated_at, view_count).
  • Phân biệt được khi nào cần B-tree, GIN, BRIN, partial index, covering index, không phải index nào cũng B-tree.

// Không dành cho ai

Khoá này KHÔNG dành cho bạn nếu

Thà mất đơn còn hơn cầm tiền người không phù hợp. Đọc kỹ. Dính 1 trong 4 → đừng mua.

Bạn chưa từng viết query SQL thật trong project nào

Mọi ví dụ, case study trong khoá đều từ query thật trong production. Chưa có context 'à, query chậm là thế này', bạn sẽ đọc lý thuyết mà thiếu 'à, hoá ra là vậy'. Không phải không hiểu, là chưa thấm.

Thay thế bằng

Build 1 project có database (Express + Postgres, Django + Postgres, đủ rồi). Insert vài chục nghìn dòng. Khi query bắt đầu chậm, mở EXPLAIN. Quay lại khoá này sau.

Bạn muốn học SQL từ đầu

Khoá giả định bạn đã viết được SELECT, JOIN, WHERE, GROUP BY. Không hướng dẫn SQL syntax. Không giải thích primary key, foreign key là gì. Đây không phải SQL tutorial.

Thay thế bằng

SQLBolt miễn phí, 1-2 tuần xong SQL cơ bản. Quay lại khi viết được query JOIN 3 bảng không cần tra cứu.

Bạn muốn trở thành DBA / vận hành Postgres cluster production

Khoá nhìn từ góc dev viết code, không phải góc DBA vận hành server. Không đi vào postgresql.conf tuning, replication setup, backup strategy, HA. Nội dung: storage, B-tree, planner, MVCC, EXPLAIN, đủ để tự debug, không đủ để vận hành cluster.

Thay thế bằng

PostgreSQL documentation chính thức + 1 khoá DBA-specific.

Bạn tin ORM lo hết và không muốn thay đổi điều đó

Khoá sẽ chỉ ra những gì ORM không làm được và tại sao hiểu tầng bên dưới quan trọng. Nếu bạn không muốn biết, khoá sẽ không có giá trị với bạn.

Thay thế bằng

Tiếp tục dùng ORM. Khi production chậm lần đầu và bạn tự muốn hiểu tại sao, quay lại.

// FAQ

Câu hỏi thường gặp

Câu hỏi không có ở đây? Email thẳng van@immistatus.com. Trả lời trong 24h.

Bạn đã đi làm, đã từng viết query DB thật trong project (đồ án cá nhân cũng tính), và đã gặp tình huống query chậm mà không biết vì sao. Bạn dùng ORM hay viết SQL thuần đều ổn. Khóa không dành cho các bạn sinh viên chưa đụng DB bao giờ, và không dành cho người muốn học để vận hành server database.

// Bắt đầu học

Trọn bộ 899.000đ. Một lần, học mãi.

11 modules · 41 bài học · cập nhật nội dung mới miễn phí. Không có ràng buộc, học đến đâu tùy bạn.