Cơ sở dữ liệu 22/09/2026 5 phút

Vì sao planner ước lượng sai: khi PostgreSQL mất thống kê và đoán mù

Planner chỉ dùng được thống kê khi điều kiện có dạng cột-toán tử-hằng số. Bọc cột trong hàm, dùng LIKE tiền tố mở, hay so cột với cột — nó mất thống kê và rơi về đoán mặc định. Đo thật bốn nguyên nhân và cách sửa từng loại. PostgreSQL 16.

Cơ sở dữ liệu 22/09/2026 6 phút

random_page_cost cho SSD: vì sao mặc định 4.0 làm PostgreSQL né index oan

random_page_cost là tỉ số nói với planner đọc trang ngẫu nhiên đắt gấp mấy lần đọc tuần tự. Mặc định 4.0 hợp ổ cứng cơ HDD (thời gian seek), nhưng quá cao với SSD. Đo thật: cùng truy vấn khớp 1% dữ liệu, rpc=4.0 quét tuần tự cả bảng mất 84 ms, rpc=1.1 dùng index còn 7 ms — nhanh gấp 12 lần. Và cạm bẫy hạ quá tay. PostgreSQL 16.

Cơ sở dữ liệu 22/09/2026 6 phút

Điều kiện OR làm mất index trong PostgreSQL: khi nào, vì sao, và cách cứu

OR không tự động giết index — nó chỉ nhanh bằng nhánh chậm nhất. Đo thật: OR trên hai cột có index cho BitmapOr 0,09 ms, nhưng chỉ một nhánh thiếu index kéo cả câu thành Seq Scan toàn bảng 48 ms. Và vì sao index gộp phục vụ AND mà không phục vụ OR. PostgreSQL 16.