【发布时间】: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