标签:
摘自:http://www.cnblogs.com/yjf512/p/4402096.html
postgres中的视图在查询的时候进行扫描子表的操作,而物化视图则是实实在在地将数据存成一张表。物化视图是在9.3 之后才有的东西。
创建一个视图
CREATE OR REPLACE VIEW student_view ASSELECT * FROM student LEFT JOIN teacher ON student.teacher_id = teacher.id;
创建一个物化视图
CREATE MATERIALIZED VIEW student_view_m ASSELECT * FROM student LEFT JOIN teacher ON student.teacher_id = teacher.id;
物化视图既然是一个实实在在存在的表,它就需要有数据填充过程,数据填充的命令是REFRESH MATERIALIZED VIEW
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的,那么你查看帮助文档就只会看到:
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才加入的操作。
那么哪种更新快呢?答案是全量更新,增量更新做的操作是将当前视图表中的数据和query中的数据做一个join操作,然后才将差量做填充。
标签:
原文地址:http://www.cnblogs.com/my--blog-/p/5372242.html