如果我在一段时间间隔后执行活动记录查询,则需要更长时间。
Say Item.all在第一次查询时需要.11秒,之后需要.003。这种行为可能是什么原因?
编辑: 活动记录查询缓存的范围是控制器的动作。在我的情况下,后续http请求中的活动记录查询也更快。
答案 0 :(得分:3)
可能的解释:
答案 1 :(得分:1)
ActiveRecord缓存查询结果。第一个查询实际上是在访问数据库 - 然后ActiveRecord等待操作完成并将结果解析为其对象。下次进行相同的查询时,它会缓存结果,以便立即返回给您,而不是一直返回数据库。
检查API for the QueryCache:如果您要清除缓存的查询,似乎可以清除查询缓存(connection.clear_query_cache
)。
This SO question还建议self.class.uncached do ... end
绕过缓存,但我不确定这是否仍适用于Rails 3。
答案 2 :(得分:0)
这肯定是ActiveRecord的缓存,你正在看。 See doc
所有方法都建立在简单的缓存原则之上 除非特别说明,否则保留最后一次查询的结果 指示不要。甚至可以在各种方法之间共享缓存 甚至更便宜的使用宏添加方法而不用担心太多 关于第一次的表现。