메모리 소트 (In-Memory Sort) : 전체 데이터의 정렬 작업을 메모리 내에서 완료하는것 (Internal Sort)
디스크 소트 (To-Disk Sort) : 할당받은 Sort Area 내에서 정렬을 완료하지 못해 디스크 공간까지 사용하는 경우 (External Sort)
< 디스크 소트 과정 >
소트할 대상 집합을 SGA 버퍼캐시를 통해 읽어들이고, 일차적으로 Sort Area에서 정렬을 시도
⇒ 양이 많을 때는 정렬된 중앙집합을 Temp 테이블스페이스에 임시 세그먼트를 만들어 저장
( Sort Area가 찰 때마다 Temp 영역에 저장해 둔 중간 단계의 집합 → Sort Run )
⇒ 정렬된 최종결과 집합을 얻으려면 이를 다시 Merge ( Sort Area + Sort Run )
⇒ 오름차순 정렬이라면 각각에서 가장 작은 값부터 PGA로 읽어 들이다가 PGA가 찰 때마다 쿼리 수행 다음 단계로 전달하거나 클라이언트에 전송
select sum(sal), max(sal), min(sal), avg(sal)
from emp;
select * from emp order by sal desc;
select sum(sal), max(sal), min(sal), avg(sal)
from emp
group by deptno
order by deptno;
⭐ 정렬된 group by 결과를 얻고자 한다면, 실행계획에 설령 'sort group by'라고 표시되어 있더라도 반드시 order by를 명시해야 한다.
select /*+ ordered use_nl(dept) */ *
from dept
where deptno in
(select /*+ unnest */ deptno
from emp
where job = 'CLERK');