5_05 인덱스를 이용한 소트 연산 대체

Hi·2026년 7월 17일

인덱스는 항상 키 컬럼 순으로 정렬된 상태를 유지하므로 이를 이용해 소트 오퍼레이션을 생략 할 수 있다.

(1) Sort Order By 대체

select custid, name, resno, status, tell
from customer
where region = 'A'
order by custid

[region + custid] 순으로 구성된 인덱스를 사용한다면 sort order by 연산을 대체할 수 있다.

(2) Sort Group By 대체

select region, avg(age), count(*)
from customer
group by region

-> SORT GROUP BY NOSORT

region이 선두 컬럼인 결합 인덱스나 단일 컬럼 인덱스를 사용한다면 sort group by 연산을 대체할 수 있다.

(3) 인덱스가 소트 연산을 대체하지 못하는 경우

select * from emp order by sal;

sal 컬럼을 선두로 갖는 인덱스가 있는데도 정렬을 수행하는 경우는

옵티마이저의 판단으로 인해 Index Scan을 하지 않고 Table Full Scan을 하는 경우!

또 다른 경우는 nulls first 구문!

select ~
from emp e
where deptno = 30
order by ename NULLS FIRST ;

-> SORT (ORDER BY)

단일 컬럼 인덱스일 때는 null 값을 저장하지 않지만 결합 인덱스일 때는 null 값을 가진 레코드를 맨 뒤쪽에 저장한다.

따라서 null 값부터 출력하려고 할 때는 인덱스를 이용하더라도 소트가 불가피하다.

0개의 댓글