Sort Aggregate
- Sort aggregate는 아래처럼 전체 로우를 대상으로 집계를 수행할 때 (집계함수 사용)나타나는,
'sort'라는 표현을 사용하지만 실제 소트가 발생하지는 않는다.
Sort Order by
- 데이터 정렬을 위해 order by 오퍼레이션을 수행할 때 나타난다.
Sort Group by
- sort group by는 소팅 알고리즘을 사용해 그룹별 집계를 수행할 때 나타난다.
( group by 와 order by 같이 사용 시)
Hash Group by와 비교
- 10gR2에서 Hash group by 방식이 도입되면서, order by절을 함께 명시하지 않으면
대부분 hash group 방식으로 처리된다.
Group by 결과의 정렬 순서
- 오라클은 9i부터 이미 group by 결과가 보장되지 않는다고 여러 문서를 통해
공식적으로 밝히고 있다.
- 실행계획에서 'sort group by'의 의미는 '소팅 알고리즘을 사용해 값을 집계한다'는 뜻일 뿐
결과의 정렬을 의미하지는 않는다. 물론 쿼리에 order by절을 명시하면 정렬 순서가
보장 되지만, 이때도 실행계획은 똑같이 'sort group by'로 표시된다.
- 10gR2에서 sort group by에서 sort group by가 나타나는 경우는 distinct , count 함수를
만났을 땐 항상 sort group by 방식으로 수행한다. 여기서도 결과는 정렬되지 않는다.
Sort Unique
- Unnesting된 서브쿼리가 M쪽 집합이거나 Unique 인덱스가 없다면, 그리고 세미 조인으로
수행되지도 않느다면 메인 쿼리와 조인되기 전에 sort unique 오퍼레이션이 먼저 수행된다.
( 여기서 M쪽 집합이 Unnesitng 된다고 했는데 이 튜닝을 하기 전에 고려해야 할 것은
M쪽 집합 서브쿼리가 Unnesting 되면 조인 형식이 되어서 경로가 바뀔 수 있다. )
- 만약 PK/Unique 제약 또는 Unique 인덱스를 통해, Unnesting 된 서브쿼리의 Uniqueness가
보장된다면 sort unique 오퍼레이션은 생략된다.
- union, minus, intersect 같은 집합연산자를 사용할 때오 아래와 같이 sort unique 오퍼레이션이
나타난다.
- distinct 연산을 위해서도 sort unique 오퍼레이션이 사용된다.
- 오라클 10gR2부터는 group by처럼 distinct 연산에서도 order by를 생략하면
hash unique 방식으로 수행된다.
- 참고로, 10gR2에서 아래처럼 _convert_set_to_join 파라미터를 true로 설정하면 minus,
intersect 같은 집합 연산에 hash unique 오퍼레이션을 사용한다. 즉, 조인을 통해 두 집합을
연결하고 나서 중복을 제거하는 방식이다.
* 이 부분 연관하여 4장 11절 내용이 언급되는데 4장 11절은 null 허용 컬럼이기 때문에
그런 쿼리가 되는 건지와 distinct가 결과 출력 모양상 필요한 것인지 테스트할 필요가 있다.
Sort Join
- sort join 오퍼레이션은 소트 머지 조인을 수행할 때 나타난다.
- outer 테이블에 pk 제약이나 unique 제약이 있을 때는 sort가 한 번만 발생한다.
Window Sort
- window sort는 분석함수를 수행할 때 나타난다.
'ORACLE > SQLP' 카테고리의 다른 글
성능고도화 5-4. 소트가 발생하지 않도록 SQL 작성 (0) | 2016.12.26 |
---|---|
성능고도화 5-3. 데이터 모델 측면에서의 검토 (0) | 2016.12.26 |
성능고도화 5-1. 소트 수행 원리 (0) | 2016.12.26 |
성능고도화 4-12 기타 쿼리 변환 (0) | 2016.12.26 |
성능고도화 4-11. 집합 연산을 조인으로 변환 (0) | 2016.12.26 |