안녕하세요!
오늘부터 쿼리의 검색 속도를 높일 수 있는 SQL 튜닝을 포스팅하겠습니다.
대용량 데이터 환경(빅데이터)에서 필수가 되어가고 있습니다.
이제 인덱스 튜닝에 대해 알아보도록 하겠습니다.
[인덱스 튜닝의 종류]
1. index range scan 2. index unique scan 3. index skip scan 4. index full scan 5. index fast full scan 6. index merge scan 7. index bitmap merge scan 8. index join
|
index range scan과 index unique scan은
이전에 index 포스팅 에서 다뤘습니다!
"예제를 위한 테이블 소개"
[사원] 테이블
EMPNO | ENAME | JOB | SAL | DEPT |
1 | ALLEN | SALESMAN | 1250 | 서울시 |
2 | BAKE | SALESMAN | 1600 | 서울시 |
3 | CLARK | MANAGER | 3000 | 세종시 |
4 | WARD | CLERK | 1100 | 인천광역시 |
5 | JAMES | ANALYST | 3000 | 부산광역시 |
6 | FORD | ANALYST | 3000 | 세종시 |
7 | SMITH | CLERK | 1300 | 세종시 |
8 | MILLER | MANAGER | 2450 | 서울시 |
index skip scan
인덱스 전부 스캔하지 않고 SKIP해서 스캔하는 엑세스 방법
예제1. 직업과 월급으로 결합컬럼 인덱스를 생성하고
아래의 SQL이 index scan할 수 있도록 힌트를 주세요
SQL1> SELECT ename, job, sal FROM 사원 WHERE sal = 3000;
|
결합 컬럼 인덱스의 첫번째 컬럼이 where 절에서 검색조건으로 존재해야
그 인덱스를 엑세스할 수 있습니다.
하지만 위와 같은 상황일 때,
emp_job_sal 인덱스를 엑세스하게 하려면 인덱스 스킵 조건을 쓸 수 있습니다.
단, 인덱스 스킵 스캔의 효과를 보기위한 조건이 있습니다.
결합컬럼 인덱스의 첫번째 컬럼의 종류가 많으면 그 효과를 볼 수 없습니다.
index full scan
인덱스 전체를 처음부터 끝까지 스캔하는 방법
예제2. 사원 테이블의 사원번호에 primary key를 생성하고
사원의 인원수가 몇 명인지 카운트 하세요
위의 SQL을 실행하면 INDEX FULL SCAN을 하게 됩니다.
TABLE FULL SCAN보다 훨씬 더 성능이 좋습니다.
만약 위의 결과에서 index full scan이 되지 않는다면 어떻게 해야할까요?
쿼리에 index full scan hint를 추가하면 됩니다. index full scan의 힌트는 /*+ index_fs(사원 emp_empno_pk) */ 입니다. (잘 모르겠다면 예제1번의 정답을 다시 확인하고 오세요!)
|
index fast full scan
index full scan보다 더 성능이 좋은 스캔 방법
병렬처리가 가능합니다.
예제3. 부서와 부서별 인원수를 출력하는데
빠르게 출력될 수 있도록 적절한 인덱스를 생성하고 힌트를 주고
병렬처리하여 실행하세요.
<SQL3_2의 힌트 설명>
병렬_인덱스(테이블, 인덱스이름, 사용할 CPU개수)
인덱스가 무엇인지 궁금하다면 여기로!
오늘은 여기까지!
중요한 인덱스 튜닝은 index range scan과 index skip scan이랍니다~
알아두고 넘어갑시다!
이 글이 도움되셨다면 아래 공감 꾹~
'SQL' 카테고리의 다른 글
ORACLE SQL 튜닝 | 조인 튜닝2_튜닝방법 (nested loop join, hash join, sort merge join) (0) | 2018.04.30 |
---|---|
ORACLE SQL 튜닝 | 조인 튜닝1_조인순서 ( ordered, leading ) (2) | 2018.04.20 |
ORACLE | 정규식 함수(regular expression) (0) | 2018.04.18 |
ORACLE | 다중 INSERT문 4가지 방법 (0) | 2018.04.17 |
ORACLE | 치환변수(&) 사용하는 방법 (0) | 2018.04.16 |