刷新Postgres实例化视图的性能

时间:2020-08-13 21:38:53

标签: postgresql amazon-rds-aurora

我正在探索物化视图以创建非规范化视图,以避免连接多个表以提高读取性能。 API将从实例化视图中读取以向客户端提供数据。

我正在使用Amazon Aurora Postgres(版本11)。

我正在物化视图(MV)上使用唯一索引,以便可以使用“同时刷新”选项。

我要注意的是,当其中只有一小部分行在源表之一中得到更新并且我尝试刷新视图时,它的运行速度很慢。实际上比第一次填充视图要慢。例如:第一次安装MV大约需要30分钟,刷新需要一个多小时。少于1%的行已更新。生成MV涉及的主要三个表分别有1800万,2700万和4000万行。

实例化视图刷新的及时性很重要,因此数据不会过时。

我可以使用自定义表来存储非规范化数据而不是物化视图,但是必须实现逻辑以刷新数据。因此,请计划在可能的情况下避免这种情况。

是否可以采取任何措施来加快物化视图的刷新过程?

如果您需要更多详细信息,请告诉我。

谢谢 基兰

2 个答案:

答案 0 :(得分:1)

即使没有什么变化,刷新实例化视图也很慢,因为每次刷新视图时,都会运行定义查询。

使用CONCURRENTLY会使操作更加缓慢,因为它不是对物化视图内容的批量替换,而是对现有数据的修改。

也许您可以创建一个非规范化表,只要基础表被修改,触发器就会更新该表。

答案 1 :(得分:0)

您可以创建第二个实例化视图并进行更新(而不是同时更新),然后将名称交换到事务中的表中。

我实际上不知道为什么postgres不能这样实现。