我有以下的ActiveRecord查詢。當我的測試環境中的消息數量爲50時運行正常,但是當我們將其投入生產並且消息數量增加到5000時,響應時間接近30秒。不好。不好調整Rails ActiveRecord查詢
如何更有效地執行此查詢,以便隨着消息數量的增長保持快速。如果查詢尚未完成,查詢將查找所有消息中的所有警報。
class AlertsController < ApplicationController
before_filter :get_user
respond_to :json, :html
def index
@messages = current_user.messages.where(:active => true).order("created_at ASC")
@alerts = Array.new
@messages.each do |message|
if (message.alerts.count > 0)
@alerts = @alerts + message.alerts.where(:completed => false)
end
end
respond_to do |format|
format.html
format.json
end
end
end
class Alert < ActiveRecord::Base
belongs_to :message
class Message < ActiveRecord::Base
has_many :alerts, dependent: :destroy
是你對你的表使用的是什麼類型的索引? – robbrit
良好的捕獲 - 在引用該消息的警報表上沒有索引。將添加它並更新你的表現。 – bluedevil2k
注意,使用'[]'創建一個空數組比使用'Array.new'更傳統。你也可以使用'+ ='將數組添加到數組中而不是'@array = @array + ...'。 – tadman