假设我有一个SQL查询,它给了我一些复杂的数据,为了在HTML中正确显示它,我想出了一个方法,我运行相同(或类似)的查询两次。
为了避免两次运行相同的查询,我可以在内存中创建一个表(最多几百行),使用数组数组或类似的东西。
我的问题是:Postgresql是否为最后一个操作提供了某种缓存,在两次运行完全相同的查询而不是创建数组数组可能更有利?
答案 0 :(得分:2)
将结果存储在RAM中几乎无疑会更快,但会使用更多RAM。这是一个权衡。即使Postgre确实有一些最后的查询缓存,你仍然需要通过网络移动数据才能访问它,这将仍然比简单地转到RAM获取数据慢。
答案 1 :(得分:1)
如果您想知道postgresql是否具有等效的mysql query cache,那么简短的回答是否定的。答案很长,可以通过pgpool等各种方式获得。
但是应该注意的是,如果已经为postgresql分配了足够的内存,它将在内存中缓存索引和数据,第二次执行查询时,即使结果集没有被缓存,它也会比第一次快得多默认情况下。
即使您将结果集保存在内存中,它也可能不比从数据库中获取结果集更有效率,如果没有基准测试标记,很难说。
如果你知道你的查询很慢并且无法使用更好的索引进行优化,而你想在不同的http请求中使用结果,那么你应该投资一个像redis或memcached这样的缓存机制。你会看到一个巨大的性能提升。