View · view thường và materialized view
View thường đọc bảng gốc mỗi lần, materialized view đọc bản lưu
View thường và materialized view
View thường order_totals chỉ lưu câu SELECT: mỗi lần truy vấn, PostgreSQL viết lại thành truy vấn trên bảng gốc orders và order_items nên kết quả luôn mới nhưng không nhanh hơn. Materialized view monthly_revenue chạy truy vấn một lần khi REFRESH và ghi kết quả ra đĩa; truy vấn sau đó đọc bản lưu nên rất nhanh nhưng chỉ mới tới lần REFRESH gần nhất.
VIEW THƯỜNG · order_totals
Chỉ lưu câu truy vấn
MATERIALIZED VIEW · monthly_revenue
Lưu sẵn kết quả
VIẾT LẠI
CHẠY MỖI LẦN
CHẠY 1 LẦN
GHI KẾT QUẢ
ĐỌC BẢN LƯU
Truy vấn view
SELECT * FROM order_totals
Định nghĩa view
câu SELECT đã lưu, không chứa dòng nào
Bảng gốc orders + order_items
JOIN và GROUP BY lại từ đầu
Kết quả luôn mới
tốn công như tự viết truy vấn
Làm mới dữ liệu
REFRESH MATERIALIZED VIEW
Bảng gốc orders + order_items
chỉ được đọc khi REFRESH
Bản lưu kết quả trên đĩa
22 dòng, tạo index được
Truy vấn materialized view
SELECT * FROM monthly_revenue
không nhanh hơn, nhưng không bao giờ cũ
rất nhanh, nhưng chỉ mới tới lần REFRESH gần nhất
© tiennhm