Ruby on Rails:为什么第一个活动记录查询需要更长时间?

时间:2011-07-26 20:20:25

标签: mysql ruby-on-rails ruby-on-rails-3 activerecord

如果我在一段时间间隔后执行活动记录查询,则需要更长时间。

Say Item.all在第一次查询时需要.11秒,之后需要.003。这种行为可能是什么原因?

编辑: 活动记录查询缓存的范围是控制器的动作。在我的情况下,后续http请求中的活动记录查询也更快。

3 个答案:

答案 0 :(得分:3)

可能的解释:

  1. ActiveRecord缓存
  2. 连接池(它不必重新启动连接)
  3. 在Web服务器或数据库服务器上加载。

答案 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

  

所有方法都建立在简单的缓存原则之上   除非特别说明,否则保留最后一次查询的结果   指示不要。甚至可以在各种方法之间共享缓存   甚至更便宜的使用宏添加方法而不用担心太多   关于第一次的表现。