gpt4 book ai didi

mysql - 减少查询 - 关联条件?

转载 作者:行者123 更新时间:2023-11-29 00:57:22 25 4
gpt4 key购买 nike

我需要一些帮助来优化以下方法。随着我的数据库规模增长到 3K 用户和 100K 锻炼,查询变得太昂贵了。不幸的是,我的 SQL 技能很初级。

该方法返回给定锻炼相对于同性别人的其他锻炼的排名,以及该性别的锻炼总数。为了简化此示例,我删除了锻炼的其他适用条件:

Class Person
has_many :workouts
named_scope :men, :conditions => {:male => true}
end

Class Workout
belongs_to :person
named_scope :by, lambda {|person_id| {:conditions => {:person_id => person_id}}}

def rank_by_gender
people = Person.men.collect{|p| p.id}
{ :place =>
Workout.by(people).count(:conditions => ["time < ?", self.time]) + 1
:entries =>
Workout.by(people).count() }
end
end
  • Person.men 现在返回几千条记录。有没有一种方法可以将该查询与计数查询结合起来,可能是通过在 people 表上使用 :male 属性进行联接?

  • 有没有办法将 Person 关联的条件放入传递给计数方法的条件中?

  • 除此之外,有没有人看到其他方法可以减少此方法中数据库查询的大小和时间?

最佳答案

这应该适合你:

  { 
:place => Workout.joins(:person).where(["`workouts`.time < ? AND `people`.male = ?", self.time, true]).size,
:entries => Workout.joins(:person).where(:people => {:male => true}).size
}

关于mysql - 减少查询 - 关联条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5372931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com