如何在PostgreSQL中缓存重复查询

时间:2019-08-18 11:25:12

标签: postgresql

我有一些广泛的查询(每个查询持续约90秒)。好消息是我的查询没有太大变化。结果,我的大部分查询都是重复的。我正在寻找一种在PostgreSQL中缓存查询结果的方法。我已经搜索了答案,但找不到(某些答案已经过时,有些还不清楚)。

  • 我使用的应用程序直接连接到Postgres。

  • 该查询是一个简单的SQL查询,它返回数千个数据实例。

SELECT * FROM Foo WHERE field_a<100

是否可以将查询结果至少缓存几个小时?

2 个答案:

答案 0 :(得分:1)

可以使用一种称为“物化视图”的技术在postgres中缓存昂贵的查询,但是鉴于您的查询多么简单,我不确定这会给您带来很多好处。

最好将这些信息直接缓存在应用程序的内存中。或者,如果可能的话,缓存进一步处理的数据集,而不是原始行。

ref:
https://www.postgresql.org/docs/current/rules-materializedviews.html

答案 1 :(得分:0)

根据您的应用程序的外观,TEMPORARY TABLE可能适合您。它仅对创建它的连接可见,并且在数据库会话关闭时会自动删除。

CREATE TEMPORARY TABLE tempfoo AS
  SELECT * FROM Foo WHERE field_a<100;

此方法的缺点是创建Foo时会获得tempfoo的快照。当您查看Foo时,不会看到任何添加到tempfoo的新数据。

另一种方法。如果您有权访问数据库,则可以通过在field

上添加索引并建立索引来显着加快查询速度。