Cơ sở dữ liệu 02/11/2025 8 phút

Bọc cột trong lower() làm truy vấn chậm 900 lần — và vì sao chỉ mục có sẵn không cứu được

Chỉ mục lưu giá trị nguyên của cột, nên hỏi về một hàm áp lên cột là mất chỉ mục và quét toàn bảng. Chỉ mục biểu thức chữa được, nhưng nó đòi khớp biểu thức chính xác tới từng ký tự và hàm phải IMMUTABLE — kèm cột sinh là lối thay thế dễ đọc hơn.

Cơ sở dữ liệu 01/11/2025 8 phút

Thêm một mệnh đề WHERE vào chỉ mục làm nó nhỏ đi 20 lần, đọc nhanh 2,9 lần và ghi nhanh 2,7 lần — cùng lúc

Phần lớn bảng nghiệp vụ đều lệch nặng: 95% đơn đã xong, 90% bản ghi đã xoá mềm. Chỉ mục một phần chỉ đánh chỉ mục đúng phần dữ liệu người ta thật sự truy vấn, và trên dữ liệu lệch nó thắng cả ba mặt cùng lúc — kèm ràng buộc unique có điều kiện và cái bẫy truy vấn quên vị từ.

Cơ sở dữ liệu 30/10/2025 8 phút

Tìm 1 dòng trong 10 triệu chỉ tốn 3 lần đọc trang — và vì sao thêm dữ liệu gần như không làm chậm

Chỉ mục B-tree lớn hơn 5.350 lần mà thời gian tìm chỉ tăng 7%, nhờ mỗi nút chứa ~366 khoá nên cây chỉ cao 3 tầng. Đo cái giá phải trả khi ghi (bốn chỉ mục làm chèn chậm 3,5 lần) và chỗ UPDATE mất cơ chế HOT khi cột có chỉ mục.

Cơ sở dữ liệu 29/10/2025 8 phút

Quét toàn bảng nhanh hơn dùng chỉ mục khi lấy quá 45% số dòng — và bộ tối ưu chuyển sớm ở 32%

Thấy Seq Scan là thêm chỉ mục — nhưng có một ngưỡng mà quét toàn bảng thật sự nhanh hơn. Đo ngưỡng đó trên 2 triệu dòng, và hai thứ dịch chuyển nó: random_page_cost (mặc định từ thời đĩa quay) và thứ tự vật lý của dữ liệu.

Cơ sở dữ liệu 28/10/2025 8 phút

Bộ tối ưu tin có 3 dòng, thực tế có 500.001 — lệch 166.667 lần, và vì sao con số đó quyết định tất cả

Gần như mọi truy vấn chậm bất thường đều bắt đầu từ một con số: chênh lệch giữa rows dự đoán và rows thật. Đo ba nguồn làm bộ tối ưu PostgreSQL đoán lệch, nặng nhất 166.667 lần — và một điều nó vẫn làm đúng dù thống kê rỗng hoàn toàn.