Giao diện
PostgreSQL
Dàn ý dưới đây tập trung vào những điểm PostgreSQL khác MySQL/InnoDB, vì đó là chỗ phỏng vấn hay hỏi khi bạn đã biết một trong hai.
Dàn ý dự kiến
- Kiến trúc tiến trình: mỗi connection một process (không phải thread), vì sao PgBouncer gần như bắt buộc.
- Lưu trữ và MVCC: heap table (không có clustered index), tuple chứa
xmin/xmax, UPDATE tạo bản mới ngay trong bảng; khác với undo log của InnoDB. - VACUUM và autovacuum: dọn tuple chết, bloat, transaction ID wraparound, HOT update.
- Index: B-tree, Hash, GIN (JSONB, full-text, mảng), GiST, BRIN (bảng rất lớn theo thời gian), partial index, expression index,
INCLUDEcho covering index. - Isolation: mặc định READ COMMITTED; REPEATABLE READ là snapshot isolation; SERIALIZABLE dùng SSI (không khoá như MySQL).
- Planner và EXPLAIN:
EXPLAIN (ANALYZE, BUFFERS), statistics,pg_stat_statements. - Replication: streaming replication (WAL), logical replication, replication slot.
- Partitioning: declarative partitioning; khác MySQL ở ràng buộc khoá.
- So sánh nhanh MySQL và PostgreSQL cho câu hỏi “chọn cái nào”.