Search
🏫

[데이터베이스] 6. 인덱싱

Tags
CS
Database
Last edited time
2023/06/16 02:41
2 more properties
Search
[데이터베이스] 10. 회복 시스템
CS
Database
2023/06/07 15:51
[데이터베이스] 10. 회복 시스템
CS
Database
2023/06/07 15:51

1. 인덱스의 이해

1.1. 인덱스의 개념

DBMS에서 요청된 레코드를 빠르게 접근할 수 있도록 지원하는 데이터와 관련된 부가적인 구조
인덱스의 탐색키를 이용하여 해당 레코드가 저장된 블럭을 디스크 저장장치 또는 메모리에서 파악하여 해당 블럭을 빠르게 적재

1.2. 인덱싱의 종류

인덱스의 종류
순서 인덱스: 특정 값에 대해 정렬된 순서 구조
해시 인덱스: 해싱 함수 기반의 인덱스
인덱스 평가 기준
접근 시간
유지 비용: 삽입/삭제 등의 인덱스 구조 갱신 비용
공간 비용

2. 순서 인덱스

2.1. 순서 인덱스의 특징

탐색키로 정렬된 순차 파일에 대해 레코드에 대한 빠른 접근이 가능하도록 구성한 인덱스
탐색키를 정렬하여 해당 탐색키와 탐색키에 대한 레코드와의 연계를 통하여 인덱스 생성
종류
밀집 인덱스
희소 인덱스
다단계 인덱스

2.2. 순차 파일

연속된 레코드의 접근을 빠르게 하기 위해 각각의 레코드 끝에 다음 레코드 위치를 나타내는 포인터를 가지고 있음
순서 인덱스
순차 파일 처럼 저장된 데이터 레코드를 가지고 만든 인덱스

2.3. 인덱스 엔트리의 구조

구조
예시

2.4. 밀집 인덱스

모든 레코드에 대해 (탐색키 값, 포인터) 쌍을 유지
인덱스의 크기가 커지는 단점

2.5. 희소 인덱스

인덱스의 엔트리가 일부의 탐색키 값만 유지
순차파일 내부에서 일련의 검색을 다시해야하는 단점이 있음

2.6. 다단계 인덱스

4KB 크기의 블럭에 100개의 엔트리가 삽입될 때, 1억개의 레코드에 대한 순서 인덱스
백만개의 블럭 → 4GB 공간 필요
인덱스 크기에 따른 검색 성능
인덱스 크기 < 메모리 크기
디스크 I/O가 줄어들어 탐색 시간 축소
인덱스 크기 > 메모리 크기
저장된 블럭을 여러번 나누어 읽어야함
디스크 I/O 비용이 증가 → 탐색 시간 증가
→ 다단계 인덱스 구성
내부 인덱스와 외부 인덱스로 구성
외부 인덱스
내부 인덱스보다 희소한 인덱스로 구성
엔트리 포인터가 내부 인덱스 블럭을 지칭
포인터가 가리키는 블럭을 스캔하여 원하는 레코드보다 작거나 같은 탐색키 값 중에 가장 큰 값을 가지는 레코드 탐색
내부 인덱스는 백만개의 블럭을 갖는 반면, 외부 인덱스는 100개의 블럭만 사용하여 작은 크기의 외부 인덱스로 메모리 적재 가능

3. B+ 트리 인덱스

이진 탐색 트리
다단계 인덱스와 이진 탐색 트리를 결합한 트리 구조 → B+트리

3.1. B+ 트리의 구조

루트 노드로부터 모든 잎노드에 이르는 경로의 길이가 같은 높이 균형 트리
순서 인덱스는 파일이 증가에 따라 접근 비용이 큼. 이에 대한 대안으로 제안됨
상용 DBMS에서 사용되는 대표적 순서 인덱스
잎(단말) 노드가 연결 리스트로 연결되어 있음
예시)

3.2. B+ 트리의 구성 요소

인덱스 세트
루트노드와 중간 노드로 구성
단말 노드에 있는 탐색키 값을 신속히 찾아가기 위한 경로를 제공
[n/2] ~ n 사이의 개수를 자식으로 소유
순차 세트
단말 노드로 구성
모든 노드가 순차적으로 서로 연결됨
단말노드는 적어도 (n-1)/2개의 탐색키를 포함
탐색키에 대한 실제 레코드를 지칭하는 포인터를 제공
단말 노드

3.3. B+ 트리 상에서의 삽입, 삭제

레코드 삽입, 삭제시
레코드 삽입
노드에서 유지해야할 탐색키와 포인터 수 증가로 인해 노드를 분할해야하는 경우 발생
레코드 삭제
노드에 유지해야할 탐색키 값과 포인터 수 감소로 형제 노드와 키를 재분배 혹은 병합해야하는 경우 발생
높이 균형 유지
노드가 분할되거나 병합되면서 높이의 균형이 맞지않는 경우 ㅂ라생

3.4. 탐색키의 삽입

해당 단말 노드에 <탐색키, 포인터> 쌍으로 삽입
삽입시 탐색키가 순서를 유지
삽입 대상 노드에 추가적인 저장할 공간이 부족할 경우 분할 진행
부모 노드에 탐색키를 조정하고 추가된 노드에 대한 포인터 삽입
예시) COM24 삽입

3.5. 탐색키의 삭제

같은 탐색키 값을 가지는 다중 엔트리 존재시, 삭제될 레코드를 가리키는 엔트리 찾을때까지 탐색 후 단말 노드에서 제거
단말 노드에서 제거된 엔트리의 오른쪽에 있는 엔트리들은 빈공간이 없도록 왼쪽으로 이동
탐색키가 재분배되는 삭제
단말 노드에 탐색키가 존재하지 않는 경우
왼쪽의 형제 노드와 키 재분배 진행
예시) COM12 삭제