提高 SQL 查询的性能,该查询 returns 24 小时的结果相同

Improve performance for a SQL query that returns the same result for 24 hours

在我的 Rails 应用程序中,我只执行 10 个唯一的 SQL 查询。但是,每个都需要很长时间(1 - 5 秒)。每个查询的结果仅每 24 小时更改一次。

有哪些解决方案可以提高性能?

我在 Rails 上使用 Postgres 和 Ruby。

我应该在某处缓存查询结果吗?我应该使用 "stored procedures"(还不知道它们是什么)吗?还有什么我应该研究的吗?

如果您至少使用 9.3 版,那么也许 Materialized views?这样你就可以在类似于 table 的视图中存储结果,你可以每 24 小时使用以下命令刷新一次结果:REFRESH MATERIALIZED VIEW.

如果您的查询 returns 很多行,您可以考虑一些其他选项(在程序中缓存结果等)。

我会像这样使用 Rails.cache

def self.some_long_query_that_changes_every_day
  Rails.cache.fetch ['some_cache_key'], expires_in: 12.hours do
    self.where(field: value)
  end
end

fetch 将从未过期的缓存中读取或进行数据库查询并使用该键将其存储在缓存中。

唯一棘手的部分是 expires_in 部分。根据您的数据更改的确切时间,您可能希望根据存储的时间来计算 expires_in

expire_in = Time.now.utc.end_of_day - Time.now.utc
Rails.cache.fetch ['some_cache_key'], expires_in: expire_in....

或类似的东西。

从查询中生成静态 HTML 或 XML 文档并提供该文档。

一天一个,生成一个新的静态文档。

这具有尽可能低的开销。