我試圖通過減少使用ActiveRecord 3.0.9查詢的數量來實現。我生成了關於'虛擬'200K客戶和500K訂單。ActiveRecord的opitimization - 最好的方式來查詢所有在一次?
這裏的模型:
class Customer < ActiveRecord::Base
has_many :orders
end
class Orders < ActiveRecord::Base
belongs_to :customer
has_many :products
end
class Product < ActiveRecord::Base
belongs_to :order
end
當你在控制器中使用此代碼:
@customers = Customer.where(:active => true).paginate(page => params[:page], :per_page => 100)
# SELECT * FROM customers ...
,並在視圖中使用這個(我刪除了更易於閱讀HAML代碼):
@order = @customers.each do |customer|
customer.orders.each do |order| # SELECT * FROM orders ...
%td= order.products.count # SELECT COUNT(*) FROM products ...
%td= order.products.sum(:amount) # SELECT SUM(*) FROM products ...
end
end
然而,在呈現頁的表格每頁100行。問題在於它的加載速度有點慢,因爲它會針對每個客戶的訂單發出約3-5次查詢。這大約有300個查詢來加載頁面。
有減少查詢的數量和更快的加載頁面的替代方法是什麼?
注:
1)我已經嘗試使用包括(:訂單),但它包括了超過20萬個order_ids。這是問題。
2)他們已經索引。