반응형
1. 인덱스의 개념
인덱스는 데이터 레코드를 빠르게 접근하기 위해 <키 값, 포인터> 쌍으로 구성되는 데이터 구조이다.
- 데이터 빠르게 찾을 수 있는 수단이며 이블에 대한 조회 속도 높여 주는 자료구조
- 테이블에서 자주 사용되는 컬럼 값 빠르게 검색 가능토록 색인 만들어 놓은 형태
- 인덱스가 없으면 특정한 값을 찾기 위해 모든 데이터 페이지를 확인하는 이 발생한다.
- 레코드의 삽입과 삭제가 수시로 일어나는 경우에는 인덱스의 개수를 최소로 하는 것이 효율적
- 과다한 인덱스 생성은 DB 공간 많이 차지하며 Full Table Scan보다 속도가 느려질 수 있음
- 테이블 데이터 삽입, 삭제, 변경 수행하는 DML 작업 시 성능 떨어짐
- 레코드의 물리적 순서가 인덱스의 엔트리 순서와 일치하게 유지되도록 구성되는 인덱스를 클러스터드 인덱스라고 한다.
클러스터드 인덱스(Clustered index)
- 인덱스 키의 순서에 따라 데이터가 정렬되어 저장되는 방식
- 한 개의 릴레이션에 하나의 인덱스만 생성할 수 있음
넌클러스터드 인덱스(Non-Clustered index)
- 인덱스의 키 값만 정렬되어 있을 뿐 실제 데이터는 정렬되지 않는 방식
- 한 개의 릴레이션에 여러 개의 인덱스를 만들 수 있음
2. 트리 기반 인덱스
인덱스를 저장하는 블록들이 트리 구조를 이루는 것으로 상용 DBMS에서는 트리 구조 기반의 B+ 트리 인덱스를 주요 사용한다.
- 트리 인덱스
- 일반적으로 사용되는 인덱스 방식으로, 루트 노드에서 하위 노드로 키 값의 크기를 비교해 나가면서 단말 노드에서 찾고자 하는 데이터를 검색한다.
- 키 값과 레코드를 가리키는 포인터들이 트리 노드에 오름차순으로 저장된다.
- 브랜치 블록과 리프 블록으로 구성된다.
- 브랜치 블록 : 분기를 위한 목적으로 다음 단계를 가리키는 포인터를 가지고 있음
- 리프 블록 : 인덱스를 구성하는 컬럼 데이터와 행 위치를를 가리키는 레코드 식별자
- B+ 트리 인덱스
- B 트리의 변형으로 단말 노드가 아닌 노드로 구성된 인덱스 세트와 순차세트로 구분된다.
- 인덱스 세트에 있는 노드들은 단말 노드에 있는 키 값을 찾아갈 수 있는 경로로만 제공되며, 순차세트에 있는 단말 노드가 해당 데이터 레코드의 주소를 가리킨다.
3. 비트맵 인덱스
컬럼의 데이터를 Bit 값인 0 또는 1로 변환하여 인덱스 키로 사용하는 방법
- 목적은 키 값을 포함하는 로우(Row)의 주소를 제공하는 것
- 분포도가 좋은 컬럼에 적합, 성능 향상
- 효율적인 논리 연산 가능, 저장공간 작음, 압축 효율 좋음.
4. 함수 기반 인덱스
컬럼의 값 대신 컬럼에 특정함수나 수식을 적용하여 산출된 값을 사용하는 것
- 함수 기반 인덱스는 데이터를 입력하거나 수정할 때 함수를 적용해야 하므로 부하가 발생
- 함수 기반 인덱스는 대소문자, 띄어쓰기 등에 상관없이 조회할 때 유용하게 사용
- 적용 가능한 함수의 종류: 산술식, 사용자 정의 함수, PL, Function, Packange, C callout 등
5. 비트맵 조인 인덱스
다수의 조인된 객체로 구성된 인덱스
- 비트맵 조인 인덱스는 비트맵 인덱스와 물리적 구조가 동일하다.
6. 도메인 인덱스
개발자가 필요한 인덱스를 직접 만들어서 사용, 확장형 인덱스
- 개발자가 필요에 의해 만들었지만 프로그램에서 제공하는 인덱스처럼 사용할 수도 있다.
7. 인덱스 대상 컬럼 선정 기준
- 인덱스 컬럼의 분포도가 10~15프로 이내인 컬럼
- 분포도 : (컬럼값의 평균 ROW 수 / 테이블의 총 Row 수) * 100
- 분포도가 10~15프로 이상이어도 부분 처리를 목적으로 하는 컬럼
- 입/출력 장표 등에서 조회 및 출력 조건으로 사용되는 컬럼
- 인덱스가 자동 생성되는 기본키와 유니크키 제약 조건을 사용하는 컬럼
- 수정이 발생하지 않는 컬럼
- ORDER BY, GROUP BY, UNION 이 자주 발생하는 컬럼
- 인덱스가 자주 조합되어 조회하는 경우 결합 인덱스로 생성
- 결합 인덱스: 테이블에서 여러 컬럼들을 묶어 하나의 인덱스로 만드는 것
- 컬럼 순서에 따라 액세스하는 범위가 달라질 수 있으므로 유의해야 한다.
- 항상 사용되는 컬럼
- = 연산이 되는 컬럼
- 분포도가 좋은 컬럼
- 정렬이 자주 발생하는 컬럼
- 컬럼 순서에 따라 액세스하는 범위가 달라질 수 있으므로 유의해야 한다.
- 결합 인덱스: 테이블에서 여러 컬럼들을 묶어 하나의 인덱스로 만드는 것
8. 인덱스 설계 시 고려사항
- 새로 추가되는 인덱스는 기존 액세스 경로에 영향을 미칠 수 있다.
- 인덱스를 지나치게 많이 만들면 오버헤드가 발생한다.
- 인덱스를 만들면 추가 저장 공간이 필요하다.
- 인덱스와 테이블 데이터의 저장 공간이 분리되도록 설계한다.
- 인덱스와 테이블 분리: 데이터베이스의 가장 일반적인 형태로 데이터 저장 시 인덱스의 영향을 받지 않아 저장이 빠르다.
반응형
'자격증 > 정보처리필기' 카테고리의 다른 글
[정보처리산업기사] 77강 SQL의 개념 (0) | 2022.04.01 |
---|---|
[정보처리산업기사] 76강 뷰(VIEW) (0) | 2022.04.01 |
[정보처리산업기사] 74강 반정규화(Denormalization) (0) | 2022.04.01 |
[정보처리산업기사] 73강 정규화(Normalization) (0) | 2022.04.01 |
[정보처리산업기사] 72강 관계형 데이터베이스의 제약 조건 - 무결성 (0) | 2022.04.01 |