부모 테이블에 총계 열을 보관하지 않는 것이 좋습니다. 두 경쟁 요청이 합계 열을 업데이트하려고 시도하면 하나가 실패하거나 부적절한 읽기 (시스템에 트래픽이 많지 않은 경우 제외)로 합계가 넘어 질 위험이 있습니다. 필요한
쿼리는 매우 간단하고 괜찮은 DB는 잠시 (게으른 사이비의 SQL/HQL) 좋은 성능을 제공한다 :
1) 제품에 대한 특정 평균 리뷰 점수 :
select sum(score)/count from reviews where product_id = ?
제품의
2) 목록과 평균 리뷰 점수 첫 번째 쿼리에 대한
select product_name, sum(r.score)/count(r.score)
from products p
join reviews r
group by product_name
, 당신은 리뷰를 테이블에 PRODUCT_ID에 인덱스의 어떤 종류가 있는지 확인하십시오.
hibernate를 사용하면 HQL 또는 Criteria objects을 통해 투영 쿼리를 사용할 수 있습니다. 속도가 충분히 빠르지 않으면 second level caching and query caching을 조사 할 것입니다.
show_sql
및 TestTestTest를 켜면 최대 절전 모드가 데이터베이스에 한 번만 도달하고 새 항목이 추가/업데이트 될 때 캐시가 무효화됩니다.
리뷰를 추가하거나 업데이트 한 후 CacheMode.REFRESH를 사용하여 제품을 가져 오는 호출과 함께 번들 된 트리거 또는 트리거와 함께 갈 것입니다. – user472749
실제로 2 단계 캐시에서 제거하는 것이 더 좋습니다. http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html#performance-sessioncache – user472749