【问题标题】:Trying to fix multiple SQL queries in Rails app尝试修复 Rails 应用程序中的多个 SQL 查询
【发布时间】:2016-04-01 16:39:26
【问题描述】:

我有一个为橱柜制造商/安装商加载 300 多个工作的页面。我将他们所有的活跃工作加载到一个页面上,每个工厂都有三个——达拉斯、阿灵顿和奥布里。每个工厂有 300 到 400 个活动(计划的、未安装的作业)。

因此,当我加载达拉斯页面时,我每天都会查看,并按当天的顺序输出作业。这些查询重复了大约 50 天。我想知道我是否可以以某种方式将此信息发送到缓存。

这是几天后的样子...

我每天对标头进行 2 次 SUM 查询,并进行另一个查询以过滤该特定日期的作业,即 @jobs.where(calendar_date: '2016-04-06').each do

这里是精确的查询

# ALL jobs (in the controller)
@jobs = Job.where( active: true, scheduled: true,
              manufacturing_location: session[:factory]).
              includes(:installer).
              order('calendar_date asc')

# Jobs for one day (in the view
@jobs.where(calendar_date: day).order(:calendar_order).each do

# The helper method for the 'daily tabulations' in the header
  = daily_tabulation(@jobs.where(calendar_date: day))

  def daily_tabulation(jobs)
    total_boxes = jobs.sum :number_of_cabinets
    complete    = jobs.where(complete_in_shop: true).sum :number_of_cabinets
    to_build    = total_boxes - complete
    "To Build: #{to_build}, Complete: #{complete}, Total Boxes: #{total_boxes}"
  end

这些页面需要 4 到 7 秒才能加载到浏览器中,即使使用 redis 片段缓存也是如此。当然,这 300 多个作业中的每一个都让 JS 事件处理程序按计划拖放作业以及 JS 工具提示,但我希望我可以清理这些查询并从响应时间。谢谢。

【问题讨论】:

    标签: ruby-on-rails query-optimization


    【解决方案1】:

    由于在这种情况下您使用的是一个集合,您可以一次加载您的jobs,然后像数组一样处理它:

    @job_by_day = @jobs.select { |j| j.calendar_date == day }
    

    并使用Enumerable#sort 而不是AR#order

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 2012-07-04
      • 2021-06-21
      • 2018-01-04
      相关资源
      最近更新 更多