5_02 소트를 발생시키는 오퍼레이션

Hi·2026년 7월 17일

(1) Sort Aggregate

Sort Aggregate는 전체 로우를 대상으로 집계를 수행할 때 나타나는데, 실제 소트가 발생하지는 않는다.

select sum(sal), max(sal), min(sal) from emp;

-> SORT AGGREGATE

0 sorts (memory)
0 sorts (disk)

(2) Sort Order By

데이터 정렬을 위해 order by 오퍼레이션을 수행할 때 나타난다.

select * from emp order by sal desc;

-> SORT ORDER BY

1 sorts (memory)
0 sorts (disk)

(3) Sort Group By

sorting 알고리즘을 사용해 그룹별 집계를 수행할 때 나타난다.

select deptno, job, sum(sal), max(sal), min(sal)
from emp
group by deptno, job
order by deptno, job ;

-> SORT GROUP BY

1 sorts (memory)
0 sorts (disk)

Hash Group By와 비교

order by절을 함께 명시하지 않으면 대부분 hash group by 방식으로 처리된다.

select deptno, job, sum(sal), max(sal), min(sal)
from emp
group by deptno, job ;

-> HASH GROUP BY

0 sorts (memory)
0 sorts (disk)

hash group by는 정렬을 수행하지 않고 해싱 알고리즘을 사용해 데이터를 그룹핑한다.
읽는 로우마다 group by 컬럼의 해시 값으로 해시 버킷을 찾아 그룹별로 집계항목을 갱신하는 방식이다.

정렬된 group by 결과를 얻고자 한다면, 실행계획에 설령 'sort group by'라고 표시되더라도 반드시 order by를 명시해야 한다.

(4) Sort Unique

Unnesting된 서브쿼리가 M쪽 집합이거나 Unique 인덱스가 없다면, 그리고 세미 조인으로 수행되지도 않는다면 메인 쿼리와 조인되기 전에 sort unique 오퍼레이션이 먼저 수행된다.

(5) Sort Join

소트 머지 조인을 수행할 때 나타난다.

select /*+ ordered use_merge(e) * / *
from dept d, emp e
where d.deptno = e.deptno ;

-> SORT JOIN 
   SORT JOIN

2 sorts (memory)
0 sorts (disk)

(6) Window Sort

분석함수를 수행할 때 나타난다.

select empno, ename, job, mgr, sal
	, avg(sal) over (partition by deptno)
from emp ;

-> WINDOW SORT

1 sorts (memory)
0 sorts (disk) 

0개의 댓글