행위

Group by 튜닝

DB CAFE

thumb_up 추천메뉴 바로가기


1 GROUP BY 튜닝[편집]

1.1 GROUP BY 와 HASH GROUP BY[편집]

  • Group by와 Order by를 동일한 칼럼에 결합하여 사용할때, 성능 개선 효과 발생
  • Group by를 수행하면 연관된 칼럼의 소팅을 포함해서 처리 하고 처리된 수행결과를 리턴함
  • Hash Group By 는 소팅 없이 이러한 결과를 생성함
    • 즉, Sort-Based Group by보다 항상 낳은 성능을 발휘한다.
    • 불행하게도 Order By 절을 동일 칼럼에 Group By절과 함께 사용한다면 Sort-Based Group by로 변경하며 성능은 저하될수 있음
  • 힌트 OPT_PARAM("_GBY_HASH_AGGREGATION_ENABLED" "FALSE")

1.2 GROUP BY 튜닝 핵심 사항[편집]

  1. 오라클에서 ORDER BY를 해야하는 상황에서 강제적으로 HASH GROUP BY를 수행하도록 하는것이 핵심
  2. 오라클이 HASH GROUP BY를 수행할 수 있도록 서브쿼리에 GROUP BY를 수행하도록 변경함
  3. 그리고 외부 쿼리에서 ORDER BY를 수행할때 NO_MERGE 힌트를 지정하여, 외부 쿼리가 내부 서브쿼리에 통합되지 않도록 지정
  4. 플랜을 보면, HASH GROUP BY를 수행하고, 그 결과를 SORT ORDER BY로 처리되도록 재설정 됨

1.3 결론[편집]

  1. GROUP BY를 ORDER BY와 동일한 칼럼에 결합해서 적용할때에는 오라클 옵티마이저는 더 효과적인 HASH GROUP BY를 사용하지 않고, SORT GROUP BY를 수행한다.
  2. SORT ORDER BY 계획을 피하기 위해서 SORT GROUP BY를 수행한 것이다. 그러나 성능은 형편 없다는것을 확인 할 수 있다.
  3. 성능 개선을 위해서 GROUP BY를 인라인 뷰에 작성하고, 외부 쿼리에서 ORDER BY를 수행하도록 할것
  4. 또한 두개의 쿼리가 머지되어 작동하지 않도록 /*+ NO_MERGE */ 힌트를 부여하는것에 주의 할것