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

Window function trong PostgreSQL: tính tổng hợp mà vẫn giữ từng dòng, và tối ưu chúng

Window function tính tổng hợp theo nhóm nhưng giữ nguyên mỗi dòng — thay thế self-join và subquery tương quan. Đo thật: bước tốn nhất là Sort theo PARTITION BY, một index khớp xóa hẳn nó, và gom các hàm cùng window để sắp một lần. PostgreSQL 16.

Lập trình 22/09/2026 6 phút

Window function: tính theo nhóm mà vẫn giữ từng dòng — và nhanh hơn self-join 124 lần

GROUP BY gộp nhóm lại làm mất chi tiết từng dòng. Window function tính toán theo nhóm (xếp hạng, tổng luỹ kế, so kỳ trước) mà VẪN giữ mọi dòng — thứ mà nhiều người viết bằng self-join phức tạp và chậm. Bài này đo thật trong PostgreSQL: ROW_NUMBER/RANK/DENSE_RANK khác nhau khi có tie, running total + LAG, và một benchmark đắt giá — window làm running total trên 30.000 dòng mất 15.9ms, còn self-join tương quan chỉ 3.000 dòng đã mất 1971ms.