我有以下 ActiveRecord 查询。在我的测试环境中消息数为 50 时运行良好,但当我们投入生产时,消息数增长到 5000 条时,响应时间接近 30 秒。不好。
我怎样才能更有效地进行此查询,因此随着消息数量的增加保持快速。如果尚未完成,查询会从所有消息中查找所有警报。
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