2019년 1월 8일
데이터베이스 인덱스
I. 데이터베이스 검색속도 향상, 인덱스의 개념
- 데이터베이스에 저장된 자료를 빠르게 조회하기 위해 테이블에 연관되어 독립적인 저장공간 보유 객체
II. 구성된 인덱스 평가 기준
가. 테이블 형태별 인덱스 평가 기준
평가 기준 | 설명 |
---|---|
소형 테이블 | – 테이블이 작더라도 PK는 반드시 생성 – 자주 참조되는 테이블 경우 인덱스 필요 |
중대형 테이블 | – 기존 인덱스 블록 사용비율 낮은 경우 다수 – 대량 입력, 오랜 시간 경과 시 리빌드 필요 |
대형 테이블 | – PK 미사용 및 Unique Index 생성 고려 – 사용하는 파티션의 인덱스만 사용 고려 |
나. 분포도 형태별 인덱스 평가 기준
평가 기준 | 설명 |
---|---|
분포도 낮음 | – 분포도 낮은 경우 인덱스 효율이 높음 – 손익분기점 기준 인덱스 사용여부 결정 필요 |
분포도 높음 | – 분포도 높은 경우 인덱스 미사용 가능 – 부분 범위 처리 시 실제 분포도 감소 가능 |
- 이 외 액세스 빈도 등 사용 목적에 따른 인덱스 평가 필요
III. 비트리, 비트맵, 함수기반 인덱스
가. 물리적 구분에 따른 비트리, 비트맵 인덱스
– 비트리(B-Tree) 인덱스
항목 | 내용 |
---|---|
개념 | – 루트노트부터 키 값 비교하며 트리형태 하향식 검색 |
목적 | – 범용적으로 가장 많이 사용하는 인덱스 구조 |
특징 | – 루트(root), 브랜치(branch), 리프(leaf) 블록으로 구성 |
생성 | – CREATE INDEX 인덱스명 ON 테이블명; |
– 비트맵(Bitmap) 인덱스
항목 | 내용 |
---|---|
개념 | – 비트 이용 컬럼값 저장하여 RowID 자동 생성 |
목적 | – 대량 데이터 조회 작업이 많은 시스템에 유용 |
특징 | – 루트, 브랜치 블록은 비트리와 동일, 리프는 비트맵 |
생성 | – CREATE BITMAP INDEX 인덱스명 ON 테이블명; |
나. 논리적 구분에 따른 함수기반 인덱스
항목 | 내용 |
---|---|
개념 | – 인덱스 생성 컬럼에 함수나 산술식 적용 |
목적 | – WHERE 절에서 함수가 자주 사용되는 경우 사용 |
특징 | – 테이블의 컬럼들을 가공한 논리적 컬럼을 인덱스화 |
생성 | – CREATE INDEX 인덱스명 ON 테이블명(함수식(컬럼)); |
- 이 외에도 해시, 클러스터 인덱스 등 사용 목적에 따른 인덱스 선정 필요
IV. 인덱스 선정 시 고려사항
방안 | 설명 |
---|---|
인덱스 사용여부 | – 인덱스 사용 시 효과 여부 확인 필요 – 인덱스 역할 중복 시 악영향 발생 |
이상적 구성 | – 이상적인 구성으로 인덱스 역량 향상 – 최소 인덱스로 모든 액세스 수용 |
실측자료 활용 | – 가능한 실측자료 활용 종합 분석 필요 – 액세스 빈도, 분포도, 테이블 크기 등 |
- 인덱스 사용 시 득실 계산 후 평가 기준 통한 사용 형태 선정