[英]Ruby on Rails: Why first active record query takes longer?
如果我在一段时间间隔后执行活动记录查询,则需要更长时间。
Say Item.all在第一次查询时需要.11秒,之后需要.003。 这种行为可能是什么原因?
编辑:活动记录查询缓存的范围是控制器的动作。 在我的情况下,后续http请求中的活动记录查询也更快。
可能的解释:
ActiveRecord缓存查询结果。 第一个查询实际上是在访问数据库 - 然后ActiveRecord等待操作完成并将结果解析为其对象。 下次进行相同的查询时,它会缓存结果,以便立即返回给您,而不是一直返回数据库。
检查QueryCache的API :如果要清除缓存的查询,似乎可以清除查询缓存( connection.clear_query_cache
)。
这个SO问题也表明self.class.uncached do ... end
以绕过缓存,但我不确定这是否仍然适用于Rails 3。
这肯定是ActiveRecord你正在看的缓存。 见文档 。
所有这些方法都建立在一个简单的缓存原则之上,该原则将保留最后一个查询的结果,除非特别指示不这样做。 缓存甚至可以在各种方法之间共享,使得使用宏添加方法的成本更低,而不必担心第一次使用性能过高。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.