본문 바로가기

나 취준생/SQL

SQL - 인덱스를 사용한 튜닝

320x100

인덱스를 사용하여 튜닝하는 방법


튜닝전 :

 explain plan for

 select /*+ index(emp emp_sal) */ ename, sal

  from emp

  where sal*12=36000;



-- 지금 sal에는 인덱스가 있는 상황이고, 인덱스를 엑세스하라고 힌트를 줬는데도 불구하고

실행 계획이 full table scan을 했다.

왜냐하면

where 절의 인덱스 컬럼이 가공 되었기 때문.


어떻게 튜닝해야 인덱스 scan을 하도록 만들 수 있을까?


explain plan for

  select /*+ index(emp emp_sal) */ ename, sal

  from emp where sal=36000/12;


select * from table(dbms_xplan.display);



튜닝 전 :

select /*+ index(emp emp_job) */ ename, job

 from emp

 where substr(job,1,5) = 'SALES';


튜닝 후 :

select /*+ index(emp emp_job) */ ename, job

  from emp

  where job like 'SALES%';


** 왼쪽(좌변)에 있는 인덱스 컬럼을 가공하면 full table scan 해버리니 우변만 가공하자.



튜닝 전:

select /*+ index(emp emp_hiredate) */ ename, hiredate

 from emp

 where to_char(hiredate,'RRRR') = '1981';


튜닝 후:

select /*+ index(emp emp_hiredate) */ ename, hiredate

 from emp

 where hiredate between to_date('1981/01/01','RRRR/MM/DD')

                    and to_date('1981/12/31','RRRR/MM/DD');


튜닝 전:

select ename, sal, job

 from emp

 where job='SALESMAN'

 order by sal desc;


튜닝 후:

select /*+ index_desc(emp emp_sal) */ ename, sal, job

  from emp

  where sal > 0 and job='SALESMAN';



** 내가 생성한 인덱스 목록을 확인하는 방법


select index_name

 from user_indexes

 where index_name like 'EMP%';


** 인덱스를 삭제하는 법


drop index emp_ename;


반응형

'나 취준생 > SQL' 카테고리의 다른 글

SQL - 실수로 지운 데이터 복구하기  (0) 2020.11.11
SQL - 시퀀스  (0) 2020.11.11
SQL - 인덱스 원리, 힌트  (0) 2020.11.11
SQL - 인덱스  (0) 2020.11.10
SQL - 뷰  (0) 2020.11.10