我的網頁有問題。緩慢的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
洗牌的使用與我有關。基本上,在我看來,你會得到一個隨機公司,檢查是否有效,如果不重複。是對的嗎? –