order by 절을 사용해서 sql을 작성하게 되면 오라클은 내부적으로 정렬작업을 수행하기 위해 오라클 메모리인 pga영역에서 정렬작업을 수행합니다.

그런데 이 pga영역에 한정된 메모리 영역이기 때문에 너무 과도한 정렬 작업을 해야한다면 db에 부하를 주게 됩니다.

그래서 만약 인덱스를 활용할 수 있다면 order by절 쓰지말고 인덱스를 통해서 정렬된 결과를 보는 튜닝 방법입니다.

다음과 같이 인덱스를 생성하면 인덱스의 구조는 컬럼값 +rowid로 되어 있고 컬럼값은 ascending하게 정렬되어 저장되게 됩니다.

@demo

create index emp_sal on emp(sal);

Untitled

테이블에 rowid를 조회하시오!

select rowid, e.*
from emp e;

rowid가 해당 로우의 주소입니다. 이주소가 테이블에도 있고 인덱스에도 있습니다.

문제 15. 아래의 sql을 튜닝하시오!

@demo

create index emp_sal on emp(sal);

튜닝전

select ename,sal
from emp
order by sal asc;
select * from  table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));

실행계획에서 order by 가 출현하면 없을 때보다 빅데이터 환경에서는 느려집니다.