점심시간 문제:
create index emp_ename on emp(ename);
select /*+ index_desc(emp emp_ename) */ ename, sal
from emp
where ename > '0' ;
select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'))
;
그룹함수도 정렬작업이 내부적으로 발생합니다. 정렬작업을 최소화 하기 위해서 인덱스를 활용을 해서 SQL 을 작성하는게 권장됩니다.
SQL 이 길다고 악성 SQL 이 아니고 인덱스를 활용하지 못하는 SQL이 악성 SQL 입니다.
실습예제1. 사원 테이블에서 최대월급을 출력하고 실행계획을 보시오 !
@demo
select max(sal)
from emp;
explain plan for
select max(sal)
from emp;
select * from table(dbms_xplan.display);
실제 실행계획
select max(sal)
from emp;
select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'))
;
설명: sort aggregate가 나오면 정렬 작업을 내부적으로 수행했다는 것을 확인할 수 있습니다.
※전체 범위 처리와 부분범위 처리라는 용어를 알고 있어야합니다. (SQLP)
예:
select max(sal)
from emp;