인덱스
데이터의 빠른 검색을 위해 사용하는 색인 기술
- b-tree 이용하여 검색 속도 향상
- balanced-tree - 이진트리의 변형된 알고리즘
인덱스 장/단점
장점
- 검색 속도가 빠름
- 시스템 부하를 줄여 성능 향상
- 자동 정렬
단점
- 추가 공간 필요
- 생성 시간 소요
- Insert/Update/Delete 작업 시 성능 저하 (많을수록 더 느려진다)
인덱스 생성:
CREATE INDEX 인덱스명 ON 테이블명 (컬럼);
인덱스 계획 출력:
EXPLAIN PLAN FOR SELECT * FROM emp WHERE ename = ‘손흥민’;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
인덱스 튜닝
- 인덱스를 사용해야할 칼럼은?
- WHERE절 조건에서 자주 사용되는 컬럼
- 조인 시 조건에 사용되는 컬럼
- 두개 이상의 컬럼이 포함되는 조건인 경우 복합 인덱스로 지정
- 복합 인덱스인 경우 조회 조건에 모든 컬럼이 동시에 사용되도록 지정 ← 그래야 효과 좋음
옵티마이저
사용자가 질의한 SQL문에 대한 최적의 실행 방법을 결정하는 역할
규칙기반 옵티마이저
- 규칙(우선순위)를 통한 실행계획 생성
- 인덱스 유무와 종류
- 연산자의 종류
- 우선순위가 높은 규칙으로 실행계획 생성
비용기반 옵티마이저 (Cost Base Optimizer)
- 규칙기반 옵티마이저의 미측정 사례 단점을 극복하기 위해 사용
- 가장 비용이 적은 실행계획 선택
실행계획
- SQL에서 질의한 내용을 처리하기 위한 순서와 절차, 어떤 순서로 어떻게 처리할지 결정하는 방법
- 구성요소: 조인 순서, 기법, 엑세스 기법, 최적화 정보, 연산
인덱스 스캔 방식
Index Unique Scan
- unique 인덱스를 사용하여 하나의 데이터를 추출, unique 인덱스는 중복 불가
- ‘=’ 연산자 사용
SELECT * FROM dept WHERE deptno = 20
Index Range Scan
- 인덱스를 이용하여 한건 이상의 데이터 추출
SELECT * FROM emp WHERE deptno = 20
Index Full Scan
- 처음 불록부터 마지막까지 순차적으로 탐색 (별로 좋지 않다)
SELECT * FROM EMP WHERE deptno IS NOT NULL
Index Range Scan
- 복합 인덱스로 구성된 경우 WHERE 조건절에 생략된 경우 (속도저하 위험)
SELECT * FROM emp WHERE ename = ‘손흥민’ and mgr = 1000;
인덱스 스캔 유도
- 실행 계획 생성 시 통계정보 이용, 하지만 잘못된 실행계획 만들 수 있음
- 원하는 실행계획을 유도하기 위해 힌트 사용
SELECT /+ 힌트명(테이블명 인덱스명) / …
힌트의 종류:
- INDEX: 인덱스 스캔 유도
- INDEX_RS: index range scan 유도
- INDEX_SS: index skip scan 유도
- INDEX_FFS: index fast full scan
인덱스 활용
- 인덱스 칼럼 가공 금지
- 복합인덱스와 개별 인덱스
추가적으로 작성하길…