关于PostgreSQL中的视图和物化视图
视图是什么?
总之,这就是“虚拟表”。它是一种能够像处理表一样处理指定SELECT语句结果的机制。
视野的优点
可以省去每次编写复杂的SELECT语句。
建议:观点的不足之处
处理速度很慢。因为视图不具备实体数据,所以每次执行上述查询时,将会被替换为视图中定义的SELECT语句并执行。
创建视图语法
CREATE VIEW ビュー名 AS SELECT文;
实际的例子
让我们来创建下面的视图。
CREATE VIEW test_view AS
SELECT t1.id, t1.name, t1.age, t2.address, t2.city, t3.job
FROM sample_table1 AS t1
JOIN sample_table2 AS t2 ON t1.id = t2.id
JOIN sample_table3 AS t3 ON t1.id = t3.id
WHERE t1.age < 25 AND t2.city = '東京';
通过这个功能,您可以不必每次都写出在”AS”之后所指定的SELECT语句,而是可以通过下面的简单查询来执行。
select * from test_view;
另外,需要注意的是,视图是只读的,不能对视图进行插入、更新和删除操作。
此外,如果具有对视图的引用权限,则无需考虑对原始表的引用权限。
物質化视图是什么意思?
PostgreSQL也有一种称为物化视图的机制,简称为Mat-View。
这一功能是从PostgreSQL 9.3版本开始实现的。
事实上,视图并不具有数据的实体性,而材料化视图特点在于缓存和保持目标数据作为实体。
直接用中国语言翻译,通过使用Materview获得的好处。
・可以避免编写复杂的SELECT语句。
・由于具有数据实体,所以比视图处理速度更快。
马特杜伊的缺点
如果原始表发生更改,物化视图仍保持旧数据,需要手动更新。
创建MateView的语法如下:
除了写MATERIALIZED这个单词之外,其他都与创建视图相同。
CREATE MATERIALIZED VIEW マテリアライズドビュー名 AS SELECT文;
一个真实的例子
让我们尝试创建下面的材料视图。
CREATE MATERIALIZED VIEW test_mate_view AS
SELECT t1.id, t1.name, t1.age, t2.address, t2.city, t3.job
FROM sample_table1 AS t1
JOIN sample_table2 AS t2 ON t1.id = t2.id
JOIN sample_table3 AS t3 ON t1.id = t3.id
WHERE t1.age < 25 AND t2.city = '東京';
当统计数量时,结果显示为8件。
select count(*) from test_mate_view;
在这8条数据中删除了2条记录,再次运行后仍然保持8条不变。
为了将表的实体反映到物化视图中,需要执行以下命令。
REFRESH MATERIALIZED VIEW マテリアライズドビュー名;
只需要一种选择的中国翻译:
这次的情况是
REFRESH MATERIALIZED VIEW test_mate_view;
select count(*) from test_mate_view;
当再次执行时,获取了6条数据。
帕拉夫热视角的补充说明
在PostgreSQL中,刷新(REFRESH MATERIALIZED VIEW)物化视图的更新是完全刷新,即重新更新所有记录的行为。在OracleDB中,可以进行增量刷新,但在PostgreSQL中,这个功能尚未实现。