인덱스는 항상 키 컬럼 순으로 정렬된 상태를 유지하므로 이를 이용해 소트 오퍼레이션을 생략 할 수 있다.
select custid, name, resno, status, tell
from customer
where region = 'A'
order by custid
[region + custid] 순으로 구성된 인덱스를 사용한다면 sort order by 연산을 대체할 수 있다.
select region, avg(age), count(*)
from customer
group by region
-> SORT GROUP BY NOSORT
region이 선두 컬럼인 결합 인덱스나 단일 컬럼 인덱스를 사용한다면 sort group by 연산을 대체할 수 있다.
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 값부터 출력하려고 할 때는 인덱스를 이용하더라도 소트가 불가피하다.