Ⅰ. Index 개요
가. Index 의 개념
- 데이터베이스 시스템의 인덱스는 책의 인덱스나 도서관의 카드 목록과 똑 같은 역할을 한다.
예를 들면 주어진 계좌번호를 가진 Account 레코드를 검색하기 위해 데이터베이스 시스템은
인덱스를 이용해 대응되는 레코드가 어느 디스크 블록에 있는지 찾은 후에 Account 레코드를
얻기 위해 해당 블록을 가지고 온다.
나. Index 의 기본적인 종류
- 순서 인덱스(Ordered Index) : 값에 대해 정렬된 순서로 되어 있다
- 해시 인덱스(Hash index) : 버켓의 범위 안에서 값이 일정하게 분배되어 있으며,값이
할당되는 버켓은 해시 함수에 의해 결정된다.
다. Index 의 특성
- 한 테이블에 대해 다수의 column 으로 index 구성 가능.
- 한 테이블에 대해 다수의 index 생성 가능.
- 동일한 컬럼들에 대해 다른 순서로 구성된 index 생성 가능.
- Index 의 유무가 SQL 문장 작성에 영향을 주지 않음.
- Index 는 관련 테이블과 논리적, 물리적으로 독립적임.
- 조회의 속도는 데이터 건수의 증가에 관계없이 일정하게 유지됨.
- 한 테이블에 많은 index 가 존재하는 경우 update, delete, insert 속도를 저하시킴.
II. Index 성능평가 기준
III. Index 의 구조 및 특징
가. B-Tree Index 구조
- Index 중에 가장 대표적이고 일반적이며, 가장 많이 사용되는 Index 가 B-Tree Index 임.
- B-Tree Index 의 구조는 다음과 같음.
- Branch Block: 탐색(Search)을 위해 사용됨.
- Leaf Block: 값을 저장하기 위해 사용됨.
나. B+- 트리 인덱스 파일의 특징
- B-트리의 변형으로 인덱스는 B-트리와 같은 인덱스 부분과 파일속 모든 레코드의 키
값으로 구성된 엔트리의 순차집합으로 나누어 짐
- 순차 집합이 키 값의 순서대로 연결리스트를 형성하고 있어 순차적으로 접근 될 수 있음.
- 특정 레코드 삭제시 순차집합의 해당 레코드 키를 제거함으로써 인덱스 부분은 변경할
필요가 없다
다. 해싱 파일 특징
- 주어진 레코드의 키 값으로부터 기억 장치의 상대 주소를 결정하기 위한 조소 계산 기법을
이용한 방법
- 해싱 함수 : 주소 계산 기법
1)정적 해싱함수 : 탐색키에 따라 기억장소의 주소를 고정시키는 방법
2)동적 해싱함수 : 데이터 베이스 확장 도는 축소에 따라 해싱함수를 동적으로 변형시킬 수
있는 방법
Ⅲ. Index 의 종류
가. B-Tree Index
- 대부분의 DBMS 에서 범용적으로 사용되는 Index 유형으로서 balanced tree 구조를 사용함.
- Leaf Node 의 깊이가 모두 동일하도록 밸런스가 자동으로 맞추어져 모든 레코드에 대한 접근
속도가 동일함.
- 한 테이블의 레코드수가 n 이라고 할 때, full table scan 의 특정 record 를 찾기 위한 비용은
n/2 인 반면, B-Tree Index scan 은 log n 임.
나. Reverse Key Index
- Index 내 컬럼 키값을 반대로 저장하는 index(예: 컬럼값 ‘123’ → ‘321’로 저장)
- Index 컬럼 키값 순서대로 레코드가 입력되는 경우, index 가 한 방향으로 기울지 않고 골고루
분산되므로 B-Tree Index 에서와 같은 밸런싱을 위한 오버헤드가 적어짐, 하지만, Index Range
Scan 의 경우에는 매우 불리함.
다. Bitmap Index
- 각 키값의 bitmap 을 이용하는 index 로서 bitmap 의 각 bit 는 각각의 레코드 주소에 해당함.
- DBMS 내부에 bitmap 을 레코드 주소로 변환하는 기능이 있음.
- 데이터 웨어하우스와 같은 ad-hoc 질의에 대한 성능이 유리함.
- 다른 index 기법에 비교해 훨씬 적은 저장공간만을 필요로함.
라. Function Based Index
- Index 대상 테이블의 하나 또는 하나 이상의 컬럼에 대해 함수를 적용한 결과값을 저장한
index.
- 조회 기준으로서 자주 사용되는 함수가 있는 경우에 매우 유용함.
Ⅳ. Index 활용방안
가. Index 적용원칙
- Index 컬럼은 비교되기 전에 변형이 일어나면 Index 를 사용할 수 없음
- 부정형(not, <>)으로 조건을 기술한 경우 Index 를 사용할 수 없음
- Index 컬럼이 NULL 로 비교되면 사용될 수 없음
- 만들어진 index 는 항상 사용되는 것이 아니라 Optimizer 에 의해 선택되지 않을 수 있음.
나. Index 의 선택 지침
다. Index 의 선택 절차
① 해당 table 의 access 형태의 수집
② 대상 column 선정 및 분포도 조사
③ 반복 수행되는 access 경로(critical access path)의 해결
④ clustering 검토
⑤ index column 의 조합 및 순서의 결정
⑥ 시험 생성 및 테스트
⑦ 수정이 필요한 어플리케이션 조사 및 수정
⑧ 일괄 적용