Q

Quản trị viên

Là một lập trình viên yêu công nghệ, thích viết blog để chia sẻ kiến thức, kinh nghiệm lập trình và những điều thú vị trong thế giới tech.

1741 bài viết · Website
Cơ sở dữ liệu 22/09/2026 6 phút

Trigram pg_trgm trong PostgreSQL: tìm gần đúng, chịu được lỗi gõ

pg_trgm đo độ tương tự chuỗi bằng tỉ lệ trigram chung, nên tìm được cả khi gõ sai chính tả — điều LIKE và full-text search không làm được. Đo thật: KNN với GiST 190 ms, ngưỡng với GIN 104 ms, và Postgersql gõ sai vẫn tìm ra PostgreSQL. Chọn GiST hay GIN. PostgreSQL 16.

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

Ép kiểu ngầm định làm mất index trong PostgreSQL: hàm ẩn quanh cột

So sánh cột với sai kiểu dữ liệu khiến PostgreSQL chèn ép kiểu — và nếu nó ép vế cột, index chết. Đo thật: int8 so với numeric literal chạy Seq Scan 55 ms so với 0,04 ms; hướng ép quyết định tất cả. Cách đọc EXPLAIN để phát hiện và cách sửa. PostgreSQL 16.

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

Sắp thứ tự cột để giảm padding trong PostgreSQL: cùng bảng, khác dung lượng

PostgreSQL căn lề mỗi cột theo mốc kiểu của nó, chèn byte đệm khi lệch. Đo thật: cùng 7 cột y hệt, thứ tự xấu chiếm 403 MB còn thứ tự tối ưu chỉ 287 MB — chênh 116 MB chỉ do thứ tự khai báo. Quy tắc sắp xếp và truy vấn tự tìm thứ tự tối ưu. PostgreSQL 16.

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

Khóa ngoại có cần index không trong PostgreSQL: có, và nó không tự tạo

PostgreSQL tự tạo index cho PRIMARY KEY và UNIQUE nhưng KHÔNG cho cột khóa ngoại. Đo thật: thiếu index đó, xóa một dòng cha phải quét cả 5 triệu dòng con (179 ms so với 0,7 ms), và JOIN cha con seq scan 52 ms so với 0,17 ms. Vì sao, và khi nào vẫn bỏ được. PostgreSQL 16.

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

Deadlock trong PostgreSQL: phát hiện và tránh — kích một cái thật để xem

Deadlock xảy ra khi hai giao dịch giữ khóa mà bên kia cần, theo thứ tự ngược nhau. PostgreSQL tự phát hiện sau deadlock_timeout (1s) và hủy một nạn nhân với lỗi deadlock detected. Kích một deadlock thật để xem lỗi và log đầy đủ, rồi chứng minh khóa cùng thứ tự loại bỏ nó hoàn toàn. Vì sao ứng dụng phải có retry. PostgreSQL 16.