위에서 본 튜닝예제12번은 2개의 인덱스중에 하나의 인덱스를 선택하는거 였는데 만약 2개의 인덱스 둘다 너무나도 훌륭한 인덱스(선택도가 높은 인덱스) 이면 두개를 동시에 사용해서 index merge scan으로 스캔하면 더 좋은 성능을 보입니다.
두개의 인덱스를 같이 스캔해서 “테이블 랜덤 엑세스”를 줄인 스캔방법입니다. 만약에 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'