Cơ sở dữ liệu cho lập trình viên
Sê-ri đo đạc: cơ sở dữ liệu thật sự làm gì với truy vấn của bạn — chỉ mục, kế hoạch truy vấn, MVCC, khóa, WAL, bộ đệm — đo thật bằng EXPLAIN ANALYZE, pg_stat và \timing trong container PostgreSQL dùng một lần.
6/45 phần đã đăng
Cơ sở dữ liệu
1
Quét tuần tự và quét chỉ mục
Tìm một email trong bảng 1 triệu hàng: không index quét 7353 trang mất 14ms; có index đọc 4 trang mất 0.03ms — nhanh 400 lần. Nhưng đừng đọc 'cost' như thời gian. Đo thật.
03/09/2026
· 7 phút đọc
2
Chỉ mục B-tree bên trong
Bảng to gấp 10.000 lần (1k lên 10 triệu hàng) mà cây chỉ mục chỉ sâu thêm một tầng (2 lên 3), tìm một hàng vẫn đọc 6-7 trang. Vì fanout lớn, tra cứu gần như phẳng. Đo thật.
03/09/2026
· 7 phút đọc
3
EXPLAIN và EXPLAIN ANALYZE
Trên hai cột trùng nhau, planner đoán 99 hàng còn thực tế là 10000 — lệch 100 lần. 'rows' của EXPLAIN là ước lượng, 'actual rows' của ANALYZE mới là đo thật. Đo thật.
03/09/2026
· 7 phút đọc
4
Chi phí một truy vấn
Cost của một seq scan = 5406 trang x 1.0 + 1 triệu hàng x 0.01 = 15406.00, khớp EXPLAIN đến từng số lẻ. Nhưng đổi random_page_cost là planner đổi kế hoạch dù dữ liệu y nguyên. Đo thật.
03/09/2026
· 7 phút đọc
5
Khi chỉ mục không giúp
Truy vấn chọn lọc (1% hàng) dùng index nhanh 4.7 lần; nhưng trên cột boolean 50% hàng, planner bỏ index chọn seq scan. Index chỉ giúp khi truy vấn trả về ít hàng. Đo thật.
03/09/2026
· 7 phút đọc
6
Chỉ mục phủ (index-only scan)
Index chỉ có cột a đọc 103 trang (phải nhảy heap lấy b); index phủ (a) INCLUDE (b) sau VACUUM chỉ đọc 4 trang, Heap Fetches=0. Nhưng chưa VACUUM thì vẫn nhảy heap. Đo thật.
03/09/2026
· 7 phút đọc
Còn 39 phần nữa sẽ lần lượt được đăng.