在postgresql中可以使用物化视图作为数据源吗?

llycmphe  于 2023-04-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(174)

创建实体化视图并且它的源仍然是实体化视图是否更好?我想知道如果我这样做是否会有性能问题?

CREATE MATERIALIZED VIEW IF NOT EXISTS vw_table
AS
select column2, column2 from vw_table_first
WITH DATA;
fdbelqdn

fdbelqdn1#

我正在高事务通信系统中使用PostgreSQL物化视图
有一个传感器表,其行数是静态的(几百行)。在另一个表中,有通过外键链接的这些传感器的操作历史(数百万条记录)。

传感器

列名数据类型说明
主键整数传感器主键
名称瓦尔查尔(255)传感器名称

传感器活动

列名数据类型说明
传感器标识整数Sensors表的外键
时间戳时间戳传感器记录事件的日期和时间
价值十进制(10,2)传感器在该时间戳记录的值

物化视图

列名数据类型说明
主键整数传感器主键
名称瓦尔查尔(255)传感器名称
last_timestamp时间戳传感器上次记录事件的日期和时间
最后_值十进制(10,2)传感器记录的最后一个值

1.物化视图定义了整个传感器表上的传感器查询及其最后的活动记录(连接,子查询等)。
1.系统的其他部分定期使用这个物化视图,并使用一个简单的“where”子句过滤结果,以收集传感器的当前状态。它类似于 * 实时视图 *。
主要的一点是,在具有数百万行的联接表上只有一个表扫描。物化视图结果仅减少到传感器的数量。系统的其他部分,周期性地请求此数据,只需要表扫描物化视图。
这使我们能够在一个简单的Azure Linux虚拟机上运行该系统的10个数据库示例50欧元/月,每个传感器每秒向服务器发出请求24/7
在高事务处理系统中使用物化视图时,请务必记住,刷新视图可能会导致争用和锁定问题。要缓解此问题,您可以在刷新视图时使用CONCURRENTLY关键字来使用并发刷新方法。
此外,您可能需要考虑为实体化视图建立索引以优化查询性能。为此,您可以在经常查询的实体化视图列上创建索引。
我还在每次模式更新时重新创建物化视图(例如,添加新列),方法与答案中的查询相同。

相关问题