我的网页有问题。缓慢的SQL查询
它的运行速度非常慢,所以我在互联网上读到它可能是SQL的一个糟糕用法。所以我评论了更复杂的SQL行,并且它再次顺利运行。
我的问题是:'有没有办法让这个SQL请求“更轻”?
@companies = Company.where('tbl_companys.state = "enabled"')
@companies = @companies.includes(:benefit).where("tbl_benefits.end_date >= {Date.today}")
@companies = @companies.includes(:benefit).where(tbl_benefits: { state: 'enabled' })
has_benef_gastro = false
has_benef_hote = false
has_benef_ent = false
until has_benef_gastro == true
@esta_gastro = (@companies.where('id_category = "2-gastronomia"').shuffle)[0]
@benefit_gastro = Benefit.where('id_company = ? AND end_date >= ? AND state = "enabled"', @esta_gastro.id_company, Date.today).first
if @benefit_gastro.nil? == false
has_benef_gastro = true
end
end
until has_benef_hote == true
@esta_hotelero = (@companies.where('id_category = "1-hoteleria"').shuffle)[0]
@benefit_hote = Benefit.where('id_company = ? AND end_date >= ? AND state = "enabled"', @esta_hotelero.id_company, Date.today).first
if @benefit_hote.nil? == false
has_benef_gastro = true
end
end
until has_benef_ent == true
@esta_ent = (@companies.where('id_category = "3-entretenimiento"').shuffle)[0]
@benefit_ent = Benefit.where('id_company = ? AND end_date >= ? AND state = "enabled"', @esta_ent.id_company, Date.today).first
if @benefit_ent.nil? == false
has_benef_gastro = true
end
end
感谢您的帮助!
要做的第一件事是在每行之间输出timediffs以查看时间到了哪里。如果您最终希望调整SQL,则需要提供表定义,卷和索引。 – Laurence
洗牌的使用与我有关。基本上,在我看来,你会得到一个随机公司,检查是否有效,如果不重复。是对的吗? –