- View: một truy vấn lưu sẵn dưới dạng tên gọi — không lưu dữ liệu. Mỗi lần query view, DB chạy lại câu SQL bên dưới trên dữ liệu hiện tại → luôn mới, không tốn storage, nhưng nặng nếu truy vấn phức tạp và gọi nhiều.
- Materialized view: lưu kết quả truy vấn thành bảng vật lý. Đọc nhanh như đọc bảng thường, nhưng dữ liệu là ảnh chụp tại lúc refresh → có thể cũ; phải
REFRESH MATERIALIZED VIEW(PostgreSQL cóCONCURRENTLYđể không khóa đọc) để cập nhật.
Khi nào dùng gì:
- View: cần dữ liệu luôn mới, đơn giản hóa/đóng gói truy vấn, phân quyền.
- Materialized view: truy vấn/aggregate tốn kém, đọc nhiều, chấp nhận dữ liệu trễ (dashboard, báo cáo). Đây là dạng denormalization có kiểm soát.
sql
CREATE MATERIALIZED VIEW daily_sales AS
SELECT date, SUM(amount) FROM orders GROUP BY date;
REFRESH MATERIALIZED VIEW daily_sales;