last_seen không có index
Postgres dùng HOT (Heap Only Tuple). Chỉ update heap, không đụng index page nào.
// Bạn đã đúng chỗ
Đâ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.
// Cách dạy
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
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
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.
-- 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;
last_seen không có index
Postgres dùng HOT (Heap Only Tuple). Chỉ update heap, không đụng index page nào.
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ì
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.
// Không dành cho ai
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.
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.
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.
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.
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.
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.
PostgreSQL documentation chính thức + 1 khoá DBA-specific.
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.
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 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
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.