摘自:http://www.cnblogs.com/yjf512/p/4402096.htmlhtml
postgres中的視圖在查詢的時候進行掃描子表的操做,而物化視圖則是實實在在地將數據存成一張表。物化視圖是在9.3 以後纔有的東西。sql
建立一個視圖數據庫
CREATE OR REPLACE VIEW student_view ASSELECT * FROM student LEFT JOIN teacher ON student.teacher_id = teacher.id;
建立一個物化視圖post
CREATE MATERIALIZED VIEW student_view_m ASSELECT * FROM student LEFT JOIN teacher ON student.teacher_id = teacher.id;
物化視圖既然是一個實實在在存在的表,它就須要有數據填充過程,數據填充的命令是REFRESH MATERIALIZED VIEWspa
master=> \h REFRESH Command: REFRESH MATERIALIZED VIEW Description: replace the contents of a materialized view Syntax: REFRESH MATERIALIZED VIEW [ CONCURRENTLY ] name [ WITH [ NO ] DATA ]
這裏有個注意的,若是你的psql是9.3的,那麼你查看幫助文檔就只會看到:code
master=> \h REFRESH Command: REFRESH MATERIALIZED VIEW Description: replace the contents of a materialized view Syntax: REFRESH MATERIALIZED VIEW name [ WITH [ NO ] DATA ]
這裏就引入說postgres的更新數據庫有兩種方式,一種是全量更新,一種是增量更新,增量更新是在REFRESH的時候增長一個CONCURRENTLY參數。而增量更新是9.4才加入的操做。htm
那麼哪一種更新快呢?答案是全量更新,增量更新作的操做是將當前視圖表中的數據和query中的數據作一個join操做,而後纔將差量作填充。blog