1
다음 방법을 최적화하는 데 도움이 필요합니다. 데이터베이스의 크기가 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 지금 수천 개의 레코드를 반환 :이 샘플을 간단하게 제거 한 운동에 적용 가능한 다른 조건이있다. 해당 쿼리를 count 쿼리와 결합하는 방법이있을 수 있습니다. 예를 들어 male 특성과 함께 people 테이블에 대한 조인을 사용하면됩니까?
계산 방법에 전달 된 조건에 사람 연결에 조건을 지정하는 방법이 있습니까?
그 외에도 누구나이 방법으로 데이터베이스 쿼리의 크기와 시간을 줄이는 다른 방법을 알고 있습니까?
감사합니다. 내 애플 리케이션을 언급하는 걸 잊었 아직도 레일 2.2에 붙어 있지만 Workout.all (: 조인 => : 사람, : 조건 => [...]) 구문을 변경하기가 쉬웠다 –
내가 필요한 모든 것이 있었기 때문에, 이게 제가 끝난 것입니다 : Workout.count (: joins => : person, : conditions => [...]) –
쏴, 나는 그 끝까지. – mnelson