PostgreSQL物化视图
2017-09-11 12:06
309 查看
PostgreSQL物化视图
简介
物化视图是关系型数据库中很重要的一个功能,不同于一般视图,物化视图会将试图内容物理保存在数据库中。此功能最早出现在oracle 9i版本中,MySQL要使用物化视图则需要安装flexviews插件;
而PostgreSQL在9.3版本开始支持内置物化视图功能,9.4版本实现CONCURRENTLY功能,能在刷新视图时不影响视图的正常使用。
实验环境
PostgreSQL:操作系统:CentOS Linux release 7.3.1611 (Core) 数据库系统: PostgreSQL 9.5.9 IP: 192.168.230.134 port: 5432
物化视图创建
进入psql,创建测试表t,插入数据[postgres@localhost ~]$psql psql (9.5.9) Type "help" for help. postgres=# create table t(id int,name varchar); CREATE TABLE postgres=# insert into t postgres-# select generate_series(1,1000000),random()::VARCHAR; INSERT 0 1000000
根据t表创建物化视图mv_t
postgres=# create materialized view mv_t as select * from t; SELECT 1000000
由于CONCURRENTLY功能的实现需要物化视图有唯一索引,创建唯一索引idx_ken
postgres=# create unique index idx_ken on mv_t(id); CREATE INDEX
数据的同步
查看视图中最大的idpostgres=# select max(id) from mv_t; max --------- 1000000 (1 row)
插入更大的id值
postgres=# insert into t values(1000001,random()); INSERT 0 1
此时查看视图,发现数据未实时同步
postgres=# select max(id) from mv_t; max --------- 1000000 (1 row)
执行同步命令后,数据同步
postgres=# refresh materialized view mv_t; REFRESH MATERIALIZED VIEW Time: 1727.519 ms postgres=# select max(id) from mv_t; max --------- 1000001 (1 row)
两种同步方式的对比
PostgreSQL 9.4版本新提供了concurrently参数,可以确保在刷新视图的时候不会锁住视图,但缺点是刷新速度大幅下降。postgres=# refresh materialized view mv_t; REFRESH MATERIALIZED VIEW Time: 1714.499 ms postgres=# refresh materialized view concurrently mv_t; REFRESH MATERIALIZED VIEW Time: 14255.918 ms
文档上的介绍:
CONCURRENTLY:
对物化视图的刷新不阻塞在该物化视图上的并发选择。如果没有这个选项, 一次影响很多行的刷新将使用更少的资源并且更快结束,但是可能会阻塞 其他尝试从物化视图中读取的连接。这个选项在只有少量行被影响的情况 下可能会更快。
只有当物化视图上有至少一个UNIQUE索引(只用列名 并且包括所有行)时,才允许这个选项。也就是说,该索引不能建立在任何 表达式上或者包括WHERE子句。
当物化视图还未被填充时,这个选项不能被使用。
即使带有这个选项,对于任意一个物化视图一次也只能运行一个 REFRESH。
·
相关文章推荐
- PostgreSQL物化视图
- PostgreSQL物化视图
- PostgreSQL物化视图
- PostgreSQL物化视图
- PostgreSQL物化视图
- 【PostgreSQL-9.6.3】物化视图
- PostgreSQL物化视图
- PostgreSQL物化视图
- PostgreSQL物化视图
- PostgreSQL物化视图
- PostgreSQL物化视图
- PostgreSQL 9.4版本的物化视图更新
- PostgreSQL物化视图
- postgresql9.5 物化视图测试
- PostgreSQL物化视图
- PostgreSQL 9.4版本的物化视图更新
- PostgreSQL物化视图
- PostgreSQL物化视图
- PostgreSQL物化视图
- PostgreSQL物化视图