나는 많은 모델이 Link
- 그 안타가 많습니다. 내가 뭘 하려는지 데이터베이스 테이블에서 hits
- year
, month
, day
및 hour
열 시간에 시간당 히트 데이터를 집계하는 것입니다.레일 어디 쿼리 결과에
모든 것이 정상적으로 작동하지만 아래 코드를 실행하면 데이터베이스에서 거의 개의 쿼리로 끝나기 때문에 상당히 과도한 것으로 보입니다.
#before iteration
@hits = @link.hits.group('year, month, day, hour')
.order('year ASC, month ASC, day ASC, hour ASC')
.select('year, month, day, hour, count(*) as hits')
#inside iteration
#Line breaks are included here for easy reading
hits_per_hour =
@hits.where(
:year => t.year,
:month => t.month,
:day => t.day,
:hour => t.hour
).map(&:hits).first || 0
여기 t
1 시간 씩 반복 (Iteration)이 첫 수신 링크 충돌 이후 Time
목적이다.
난 레일이 매번 다시 쿼리하는 대신 쿼리 결과를 저장할 것이라고 생각합니다. 나는 또한 쿼리 결과 또는 아무것도 캐싱에 대해 아무것도 찾을 수 없었습니다. 내가 뭔가를 완전히 놓친 건가요? 아니면이게 가장 쉬운 방법입니까? 여기
(이 나는 천의 블록 내 로그에 표시되는 내용입니다) 쿼리 모양을 샘플입니다 : 좋아SELECT year, month, day, hour, count(*) as hits
FROM `hits`
WHERE
`hits`.`link_id` = 1 AND
`hits`.`year` = 2012 AND
`hits`.`month` = 11 AND
`hits`.`day` = 2 AND
`hits`.`hour` = 14
GROUP BY year, month, day, hour
ORDER BY year ASC, month ASC, day ASC, hour ASC
질문하는 1000 개의 검색어는 무엇입니까? eager-loading associations에 의해 향상 될 수 있습니까? – pje
로드 된 연관이 없습니다. 링크가 생성 된 후 매 시간마다 실행됩니다 (현재 약 3 주). 질문 중 하나의 샘플을 질문에 추가하겠습니다. – Jon