insert into emp(empno, ename, sal) values (1111,' jack ',3000);
create index emp_ename on emp(ename);
튜닝전:
select ename, sal
from emp
where trim(ename)='jack'
select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'))
;
튜닝 후
create index emp_ename_func
on emp(trim(ename));
select ename, sal
from emp
where trim(ename)='jack';
select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'))
;
문제 12. 아래의 sql을 튜닝하시오! (sqlp 전문가 시험 출제 문제)
튜닝 전
--환경구성
@demo
create index emp_ename on emp(ename);
select ename, sal
from emp
where ename like '%EN%' or ename like '%IN%';
select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'))
;
설명: 와일드카드(%)가 앞에 있으면 무조건 full table scan입니다.
튜닝 후
select ename, sal
from emp
where regexp_like (ename,'(EN|IN)');
튜닝 후
create index emp_ename_reg
on emp regexp_like( ename, '(EN|IN)') ;
select /*+ index(emp emp_ename_reg) */ ename, sal
from emp
where regexp_like( ename, '(EN|IN)' );
select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));
설명: 정규 표현식 함수로는 함수 기반 인덱스를 생성할 수 없습니다. 위와 같이 중간 데이터를 검색하는 sql튜닝방법은 뒤에서 튜닝합니다.