order by 절을 사용해서 sql을 작성하게 되면 오라클은 내부적으로 정렬작업을 수행하기 위해 오라클 메모리인 pga영역에서 정렬작업을 수행합니다.
그런데 이 pga영역에 한정된 메모리 영역이기 때문에 너무 과도한 정렬 작업을 해야한다면 db에 부하를 주게 됩니다.
그래서 만약 인덱스를 활용할 수 있다면 order by절 쓰지말고 인덱스를 통해서 정렬된 결과를 보는 튜닝 방법입니다.
다음과 같이 인덱스를 생성하면 인덱스의 구조는 컬럼값 +rowid로 되어 있고 컬럼값은 ascending하게 정렬되어 저장되게 됩니다.
@demo
create index emp_sal on emp(sal);
테이블에 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 가 출현하면 없을 때보다 빅데이터 환경에서는 느려집니다.