设为首页 加入收藏

TOP

PostgreSQL 9.3物化视图使用(二)
2014-11-24 00:34:13 来源: 作者: 【 】 浏览:21
Tags:PostgreSQL 9.3 物化 使用
alues(22,'bad boy2');
INSERT 0 1
postgres=# select * from test_kenyon where id>20;
id | vname
----+----------
21 | bad boy
22 | bad boy2
(2 rows)
postgres=# select * from mv_test_kenyon where id>20;
id | vname
----+-------
(0 rows)
--物化视图的数据没有刷新过来
--刷新物化视图数据
postgres=# refresh materialized view mv_test_kenyon;
REFRESH MATERIALIZED VIEW
postgres=# select * from mv_test_kenyon where id>20;
id | vname
----+----------
21 | bad boy
22 | bad boy2
(2 rows)
--使用with no data刷新
postgres=# insert into test_kenyon values(32,'bad boy3');
INSERT 0 1
postgres=# select * from mv_test_kenyon where id>20;
id | vname
----+----------
21 | bad boy
22 | bad boy2
(2 rows)
postgres=# refresh materialized view mv_test_kenyon with no data;
REFRESH MATERIALIZED VIEW
postgres=# \d+
List of relations
Schema | Name | Type | Owner | Size | Description
--------+----------------+-------------------+----------+------------+-------------
public | mv_test_kenyon | materialized view | postgres | 8192 bytes |
public | test_kenyon | table | postgres | 16 kB |
(2 rows)
postgres=# select * from mv_test_kenyon;
ERROR: materialized view "mv_test_kenyon" has not been populated
HINT: Use the REFRESH MATERIALIZED VIEW command.
使用了with no data刷新后会导致物化视图里面的数据清除干净,并使物化视图不可用,如果需要继续使用,需要使用REFRESH MATERIALIZED VIEW view_name来恢复。
4.删除物化视图
postgres=# drop materialized view mv_test_kenyon ;
DROP MATERIALIZED VIEW
postgres=#
--如果有其他约束在物化视图上,需要加cascade来级联删除
四、应用场景和优劣势
可以将复杂的SQL写成视图来调用,并可增大数据的安全性
另外物化视图与普通视图比因为直接扫描数据,通常扫描的数据更少,在有索引的支持下,效率更高,网络消耗也更少,特别是跨DB,跨服务器的查询
与普通视图相比的劣势是数据需要不定时地刷新才能获取到最实时的数据。
五 、总结
1.物化视图当前是全量刷新,暂不支持增量刷新
2.刷新参数with data是全量更新(replace)物化视图内容,且是默认参数;with no data会清除物化视图内容,释放物化视图所占的空间,并使物化视图不可用
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇通过视图查历史等待事件 下一篇常用权限视图

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: