위에서 본 튜닝예제12번은 2개의 인덱스중에 하나의 인덱스를 선택하는거 였는데 만약 2개의 인덱스 둘다 너무나도 훌륭한 인덱스(선택도가 높은 인덱스) 이면 두개를 동시에 사용해서 index merge scan으로 스캔하면 더 좋은 성능을 보입니다.

Untitled

두개의 인덱스를 같이 스캔해서 “테이블 랜덤 엑세스”를 줄인 스캔방법입니다. 만약에 col1인덱스만 스캔했다면 총 6번의 인덱스를 통한 테이블 랜덤엑세스를 해야 합니다. 그리고 나서 테이블에 가서 두개의 컬럼조건에 다 만족하는 개의 데이터를 찾아냅니다.

그런데 이렇게 하지 말고 그냥 col1의 인덱스와 co2의 인덱스를 두개를 동시에 같이 스캔해서 테이블 랜덤 엑세스를 2번으로 줄이는 스캔방법이 index_merge_scan입니다.

@demo

create index emp_deptno on emp(deptno);
create index emp_job on emp(job);
 select  /*+  and_equal(emp emp_deptno emp_job)  */  ename, job, deptno
   from  emp
   where  deptno = 30  and  job='SALESMAN'; 

하나의 인덱스를 사용했을때 보다 두개를 사용 했을때 성능이 더 좋아질 때 사용합니다.

문제 21. 아래의 인덱스를 걸고 아래의 sql이 2개의 인덱스를 같이 사용하는 index merge scan이 되게 하시오!

create index emp_gender on emp(gender);
create index emp_telecom on emp(telecom);
create index emp19_gender on emp19(gender);
create index emp19_telecom on emp19(telecom);
select ename, age, gender, telecom 
from emp19
where gender = '남' and  telecom='sk'