정의
|
- 성능향상을 위해서 테이블의 ROW 키 값과 물리적 주소를 저장하는 공간
- 인덱스를 이용하여 테이블의 존재하는 데이터 검색 속도를 빠르게 하기 위한 목적으로 테이블의 저장된 로우(ROW)를 식별 가능하도록 구조화된 형태의 테이블과 별도의 체계로 저장한 데이터베이스 오브젝트
|
특징
|
- 성능향상 : 데이터베이스 테이블에 접근하는 트랜잭션의 성능 향상이 목적임
- 독립성 : 테이블에 저장구조와 별도로 인덱스만 저장할 수 있음
- 알고리즘 : Tree 구조, Hash 함수 등 적용, 알고리즘을 적용 하여 생성
- Trade off : 조회 vs 입력/수정/삭제 성능을 고려하여 인덱스 생성 연구
|
필요성
|
- 독립성 : 테이블과 독립된 공간에 저장하여 알고리즘을 활용한 검색
- Trade off : 조회 성능은 향상되지만, 입력, 수정, 삭제 시 인덱스를 변경
|
주요기능
|
- 순서 인덱스 : 단일과 복합 인덱스, 정렬 순서에 따라 인덱스를 생성
- 해싱 : 해쉬 테이블과 해쉬함수를 활용하여 메모리에서 인덱스를 검색
- 비트맵 : 0 또는 1로 인덱스를 생성하고 OLAP 과 같은 환경에서 사용
- 클러스터링 : 논리적 순서와 물리적 순서가 동일하여 고속 조회
- 옵티마이저 : PLAN_TABLE 를 생성하여 SQL문의 실행결로를 분석하여 결정
- 조인방식 고려 : Nested Loop 방식과 Sort Merge 방식의 조인방식을 파악하려 병렬처리는 Sort Merge 방삭으로 수행
|
단점
|
- 과도한 인덱스 지양 : 트랜잭션의 입력, 수정, 삭제 발생 시에 인덱스 유지에 따른 오버해드가 발생하므로 과도한 인텍스 생성 지양함
- Rebuild : 주기적으로 인덱스를 리빌드하여 인덱스 트리 재생성
|
인덱스 구조의 분류
|
- 인덱스 형태 : 트리 기반 인덱스, 해쉬 기반 인덱스, 비티맵 인덱스
- 활용 목적 : 함수 기반 인덱스, 조인 인덱스, 도메인 인덱스
|
인덱스 종류
|
- 기본 인덱스 : 기본 키(Primary Key)를 포함하는 필드들에 대한 인덱스를 말하며, 중복된 키값들이 나타날 수 없다. (필드값이 유일한 순서필트에 적용)
- 클러스터링 인텍스 : 파일 내의 레코드들이 각 레코드에 대해 유일한 값을 가지지 않는 키가 아닌 필드에 대해 물리적으로 정렬되어 있는 순서 파일에 대해 정의할 수 있으며, 이 필드를 클러스터링 필드라고 하며, 클러스터링 필드값이 같은 레코드를 검색하기 위한 인덱스를 클러스터링 인덱스 라고 한다. (필트값이 중복된 순서 필트에 적용)
- 보조 인텍스 : 인덱스로 사용하는 검색 키가 파일에 저장되어 있는 레코드의 순서와 다른 순서를
- 정의하는 인덱스를 말함. 보조 인ㄴ덱스는 후보 키나 모든 레코드에 대한 유일한 값을 갖는 필드 또는 중복된 값을 갖는 키가 아닌 필드에 대해 정의할 수 있으며, 이 필드를 보조키(secondary key)라 함 (필드값이 중복되거나 유일한 비순서 필드에 적용)
|
인덱스 설계 순서
|
- 인덱스 대상 선정 : 하나의 인스턴스가 수행하는 MULTI BLOCK READ 수가 16 으로 지정되어 있다면 테이블의 크기가 16 블럭 이상 일 때 인덱스를 설정
- 인덱스 최적화 : 인덱스 컬럼은 가능하면 수정이 자주 발생되지 않는 컬럼을 선정
- 인덱스 정의서 작성 : 설계단계에서 예상되는 인덱스에 대해 정의
|
결합 인덱스의 순서
|
- 액세스 패스 조건에 많이 사용되는 칼럼을 우선.
- ‘=’ 조건으로 사용되는 칼럼을 우선.
- 분포도가 좋은 칼럼을 우선.
- 자주 사용되는 sort의 순서로 결정.
- 해당 칼럼의 동일한 값이 적을수록 분포도가 좋다고 표현 함.
|
결합 인덱스 추가 시 고려사항
|
- 추가로 단독/싱글 인덱스의 경우 분포도가 좋은 칼럼은 단독적으로 생성하여 활용도를 향상 시킬 수 있음
- 결합/복제 인덱스의 경우 분포도는 우선 순위가 높은 편이 아님.
- 논리적 모델링에서 릴레이션이 만들어져 물리적 모델링에서 외부키(foreign key)로 사용된 칼럼에 대해서는 인덱스 생성을 권고.
- 모든 외부키에 대하여 Lock 결합을 피하기 위하여 인덱스가 생성되어야 함.
- 만약, 칼럼이 외부키에 포함되어 있고 그것을 위한 인덱스가 구성되어 있지 않다면 테이블의 무결성을 보장하기 위하여 지나친 Lock이 발생.
- 물리적 모델링에서 물리적인 FK를 사용하지 않더라도 논리적 모델링에 연결고리가 있었다면 인덱스 생성을 권고.
|