티스토리 뷰

1. 인덱스의 개념

  • 데이터 검색 시 발생하는 비효율적인 데이터 입출력 문제를 해결하기 위한 목적으로 시작
    • 인덱스 : 요청된 레코드에 빠르게 접근할 수 있도록 지원하는 데이터와 관련된 부가적인 구조
    • 인덱싱 : 인덱스를 구성하고 생성하는 작업
  • 인덱스의 탐색키를 이용하여 해당 레코드가 저장된 블록의 위치를 파악하고 해당 블록을 빠르게 적재
  • 탐색키( 검색키 )
    • 파일에서 레코드를 찾는데 사용되는 컬럼이나 컬럼의 집합

2. 인덱스의 종류와 평가기준

  • 인덱스의 종류
    • 순서 인덱스
      • 특정 값( 탐색키 )에 대해 정렬된 순서 구조
    • 해시 인덱스
      • 버킷의 범위 안에서 값의 균일한 분포에 기초한 구조로 해시 함수가 어떤 값이 어느 버킷에 할당되는지 결정
  • 인덱스의 평가기준
    • 접근 시간 : 데이터를 찾는 데 소요되는 시간
    • 유지 비용 : 새로운 데이터 삽입 및 기존 데이터 삭제 연산으로 인한 인덱스 구조 갱신 비용
    • 공간 비용 : 인덱스 구조에 의해 사용되는 부가적인 공간 비용

3. 순서 인덱스의 특징

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

4. 인덱스 엔트리

  • 인덱스를 구성하는 가장 작은 요소, 인덱스 엔트리
  • 인덱스 엔트리가 담아내야 하는 것
    • 어떤 정보를 담고 있는지?
    • 디스크 어느 위치에 저장되어 있는지?
  • 인덱스 엔트리 구조
    • 인덱스 엔트리는 데이터 검색을 빠르게 하기 위해 사용되며, 다음과 같은 구조로 되어 있다.
    • 탐색키 값 : 검색 기준이 되는 키 값 ( ex. ECE24 )
    • 포인터 : 해당 레코드가 저장된 위치를 가리킴
      • 블록 ID : 해당 레코드가 어느 블록에 저장되어있는지 ( ex. b2 )
      • 오프셋 : 해당 블록의 몇 번째에 위치하는지 ( ex. 30 )

5. 밀집 인덱스( dense index )

  • 모든 레코드에 대해 탐색키 값과 포인터 쌍을 유지
    • 밀집 인덱스는 데이터 파일에 존재하는 모든 레코드에 대해 탐색키 값과 해당 레코드의 위치를 가리키는 포인터 쌍을 구성
  • 장점
    • 원하는 레코드를 빠르게 찾을 수 있음
  • 단점
    • 모든 데이터 레코드에 대해 대응하는 인덱스가 존재하므로, 인덱스 자체의 크기가 방대해짐
    • 레코드가 많아지면 조회 시 오랜 시간 소요

6. 희소 인덱스( sparce index )

  • 인덱스의 엔트리가 일부의 탐색키 값만을 유지
    • 요청된 탐색키보다 작거나 같은 인덱스의 탐색키 값 중 가장 큰 인덱스 엔트리의 포인터가 가리키는 블록을 스캔
  • 장점
    • 밀집 인덱스에 비해 작은 크기 → 인덱스 메모리 적재 빠른 속도
  • 단점
    • 인덱스 엔트리에 없는 레코드를 찾아야 할 경우, 블록 내에서 재검색 필요

7. 다단계 인덱스의 필요

  • 4KB 크기의 한 블록에 100개의 엔트리가 삽입될 때, 100,000,000개의 레코드에 대한 밀집 인덱스
    • 1,000,000개의 블록 = 4GB의 공간 필요
  • 인덱스 크기에 따른 검색 성능
    • 인덱스 크기 > 메모리 크기
      • 저장된 블록을 여러 번 나누어 읽어야 하기 때문에 디스크 I/O 비용이 증가하여 탐색 시간이 증가
    • 인덱스 크기 < 메모리 크기
      • 디스크 I/O이 줄어 탐색 시간이 축소
  • 복수 계층의 인덱스를 구성

8. 다단계 인덱스의 구조

  • 내부 인덱스와 외부 인덱스로 구성됨
  • 외부 인덱스는 내부 인덱스보다 희소한 인덱스로 구성되며, 외부 인덱스의 각 엔트리 포인터는 내부 인덱스 블록을 가리킴
  • 구조 설명
    • 외부 인덱스는 인덱스 블록 A에 저장되어 있음
    • 외부 인덱스의 각 엔트리는 내부 인덱스 블록(예: 인덱스 블록 0, 1 등)을 가리킴
    • 내부 인덱스는 각각 여러 데이터 블록(예: 데이터 블록 0, 1, ..., m+1)을 가리킴
    • 전체 구조는 상위 인덱스 → 하위 인덱스 → 실제 데이터 순서로 구성되며, 탐색 효율성을 높이기 위한 계층적 인덱스 시스템

9. B⁺-트리의 구조

  • 구성
    • 루트 노드
      • 트리의 최상위 노드. 하나만 존재하며 중간 노드를 가리킨다.
    • 중간 노드
      • 루트 노드 또는 다른 중간 노드로부터 연결되어 있으며, 하위 노드( 중간 또는 단말 노드 )를 가리킨다.
    • 단말 노드( 리프 노드 )
      • 실제 데이터를 가리키는 포인터를 가지고 있는 노드.
      • 단말 노드들끼리는 오른쪽 방향으로 연결되어 있어 순차 접근이 가능하다.
  • 루트 노드부터 모든 단말 노드에 이르는 경로의 길이가 같은 높이 균형 트리 구조
    • 순서 인덱스는 파일이 커질수록 데이터 탐색 비용이 커지는 문제를 해결하기 위해 제안
    • 상용 DBMS에서도 널리 사용되는 대표적인 순서 인덱스 구조
  • B⁺-트리의 노드 구조
    • P₁ K₁ P₂ ... Pₙ₋₁ Kₙ₋₁ Pₙ
      • 각 노드에는 키(K)와 포인터(P)가 번갈아 저장되며, P는 하위 노드나 데이터 블록을 가리킨다.
    • 팬아웃( fanout )
      • 하나의 노드가 가질 수 있는 자식 노드의 최대 개수를 의미
      • 이는 트리의 높이와 탐색 효율에 영향
        • 팬아웃 값이 적으면 트리 높이가 커지기에, 팬아웃 값을 크게 구성해야 함

10. B⁺-트리의 구성 요소

  • 인덱스 세트
    • 루트노드와 중간노드로 구성
    • 단말노드에 있는 탐색키 값을 신속하게 찾아갈 수 있도록 경로를 제공하는 목적으로 사용
      • 트리의 상위에 있는 루트노드와 중간노드는 탐색 경로를 제공하기 위해 존재하며, 직접 데이터를 저장하지 않음
    • [n/2] ~ n 사이의 개수를 자식으로 소유
    • 어느 범위에 가면 원하는 포인터를 찾을 수 있는지 힌트 제공
  • 순차 세트
    • 단말노드로 구성
      • 단말노드( leaf node )들은 좌우로 연결되어 있으며,
      • 이는 순차 탐색 시 왼쪽 → 오른쪽 노트로 신속한 접근을 가능하게 함
    • 모든 노드가 순차적으로 서로 연결
    • 적어도 [(n-1)/2]개의 탐색키를 포함
    • 탐색키에 대한 실제 레코드를 지정하는 포인터를 제공

11. B⁺-트리 상에서의 삽입, 삭제

  • 레코드 삽입, 삭제 시 B⁺-트리 수정
    • 레코드 삽입
      • 노드에서 유지해야 할 탐색키와 포인터 수 증가로 인해 노드를 분할해야 하는 상황이 발생
    • 레코드 삭제
      • 노드에서 유지해야 할 탐색키 값과 포인터 수 감소로 형제 노드와 키를 재분배 또는 병합해야 하는 상황이 발생
    • 높이 균형 유지
      • 노드가 분할되거나 병합되면서 높이의 균형이 맞지 않는 상황이 발생
  • 삽입 : 검색과 같은 방법을 사용하여 삽입되는 레코드의 탐색키 값이 속할 단말 노드를 탐색
    • 해당 단말 노드에 <탐색키, 포인터> 쌍을 삽입
    • 삽입 시 탐색키가 순서를 유지
  • 삭제 : 삭제될 레코드의 탐색키를 통해 삭제될 탐색키와 포인터를 포함한 단말 노드를 탐색
    • 같은 탐색키 값을 가지는 다중 엔트리가 존재할 경우, 삭제될 레코드를 가리키는 엔트리를 찾을 때까지 탐색 후 단말노드에서 제거
    • 단말노드에서 제거된 엔트리의 오른쪽에 있는 엔트리들은 빈 공간이 없도록 왼쪽으로 이동

12. 노드가 분할되는 삽입

  • 부모 노드에 탐색키를 조정하고 추가된 노드에 대한 포인터를 삽입

13. 탐색키가 재분배되는 삭제

  • 예시
    • 'COM12' 삭제
      • 'COM12'가 있는 단말 노드를 검색하고 탐색키를 삭제
        • 해당 단말 노드는 삭제 후 탐색키가 존재하지 않음
        • [(n - 1)/2]개보다 탐색키가 적으므로 다른 노드와 별도의 재구조화 작업이 필요
      • 'COM12'가 저장된 노드의 오른쪽의 형제 노드와 키를 재분배
728x90

'방송대 > 데이터베이스 시스템' 카테고리의 다른 글

13강. 트랜잭션  (0) 2025.05.13
12강. 해싱과 특수 인덱스  (0) 2025.05.05
10강. 데이터 저장과 파일  (0) 2025.04.23
9강. 저장 객체  (0) 2025.04.14
8강. 정규화  (0) 2025.04.07
댓글
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
최근에 올라온 글
Total
Today
Yesterday
공지사항