我们如何知道查询是缓存还是从数据库中检索?

时间:2010-06-05 03:05:36

标签: ruby-on-rails activerecord

例如:

class Product
  has_many :sales_orders

  def total_items_deliverable
    self.sales_orders.each { |so| #sum the total }
    #give back the value
  end
end

class SalesOrder
  def self.deliverable
    # return array of sales_orders that are deliverable to customer
  end
end
  1. SalesOrder.deliverable #give所有可交付给客户的sales_orders
  2. pa = Product.find(1)
  3. pa.sales_orders.deliverable #give product_id为1且可交付给客户的所有sales_orders
  4. pa.total_so_deliverable
  5. 我要问的问题是:SalesOrder.deliverable实际计算的次数是多少次,从第1,3和4点开始,计算3次,这意味着3次访问数据库

    所以有total_so_deliverable正在推广胖模型,但更多的数据库访问。或者(在视图中)我可以在显示内容时进行迭代,因此我最终只访问数据库2次而不是3次。

    对这类问题有什么双赢解决方案/最佳实践?

1 个答案:

答案 0 :(得分:1)

查看您的环境日志(例如 log / development.log ),如果查询是您将看到的缓存:

CACHE (0.0ms)   SELECT * FROM `widgets`....

Widget Load (0.4ms)   SELECT * FROM `widgets`....

用于数据库查询。