创建实体化视图并且它的源仍然是实体化视图是否更好?我想知道如果我这样做是否会有性能问题?
CREATE MATERIALIZED VIEW IF NOT EXISTS vw_table AS select column2, column2 from vw_table_first WITH DATA;
fdbelqdn1#
我正在高事务通信系统中使用PostgreSQL物化视图。有一个传感器表,其行数是静态的(几百行)。在另一个表中,有通过外键链接的这些传感器的操作历史(数百万条记录)。
1.物化视图定义了整个传感器表上的传感器查询及其最后的活动记录(连接,子查询等)。1.系统的其他部分定期使用这个物化视图,并使用一个简单的“where”子句过滤结果,以收集传感器的当前状态。它类似于 * 实时视图 *。主要的一点是,在具有数百万行的联接表上只有一个表扫描。物化视图结果仅减少到传感器的数量。系统的其他部分,周期性地请求此数据,只需要表扫描物化视图。这使我们能够在一个简单的Azure Linux虚拟机上运行该系统的10个数据库示例,50欧元/月,每个传感器每秒向服务器发出请求24/7。在高事务处理系统中使用物化视图时,请务必记住,刷新视图可能会导致争用和锁定问题。要缓解此问题,您可以在刷新视图时使用CONCURRENTLY关键字来使用并发刷新方法。此外,您可能需要考虑为实体化视图建立索引以优化查询性能。为此,您可以在经常查询的实体化视图列上创建索引。我还在每次模式更新时重新创建物化视图(例如,添加新列),方法与答案中的查询相同。
CONCURRENTLY
1条答案
按热度按时间fdbelqdn1#
我正在高事务通信系统中使用PostgreSQL物化视图。
有一个传感器表,其行数是静态的(几百行)。在另一个表中,有通过外键链接的这些传感器的操作历史(数百万条记录)。
传感器
传感器活动
物化视图
1.物化视图定义了整个传感器表上的传感器查询及其最后的活动记录(连接,子查询等)。
1.系统的其他部分定期使用这个物化视图,并使用一个简单的“where”子句过滤结果,以收集传感器的当前状态。它类似于 * 实时视图 *。
主要的一点是,在具有数百万行的联接表上只有一个表扫描。物化视图结果仅减少到传感器的数量。系统的其他部分,周期性地请求此数据,只需要表扫描物化视图。
这使我们能够在一个简单的Azure Linux虚拟机上运行该系统的10个数据库示例,50欧元/月,每个传感器每秒向服务器发出请求24/7。
在高事务处理系统中使用物化视图时,请务必记住,刷新视图可能会导致争用和锁定问题。要缓解此问题,您可以在刷新视图时使用
CONCURRENTLY
关键字来使用并发刷新方法。此外,您可能需要考虑为实体化视图建立索引以优化查询性能。为此,您可以在经常查询的实体化视图列上创建索引。
我还在每次模式更新时重新创建物化视图(例如,添加新列),方法与答案中的查询相同。