[정보처리산업기사] 75강 인덱스(Index)

DongHo Im·2022년 1월 28일
0

정보처리산업기사

목록 보기
75/86

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. 인덱스 설계 시 고려사항

  • 새로 추가되는 인덱스는 기존 액세스 경로에 영향을 미칠 수 있다.

  • 인덱스를 지나치게 많이 만들면 오버헤드가 발생한다.

  • 인덱스를 만들면 추가 저장 공간이 필요하다.

  • 인덱스와 테이블 데이터의 저장 공간이 분리되도록 설계한다.

    • 인덱스와 테이블 분리: 데이터베이스의 가장 일반적인 형태로 데이터 저장 시 인덱스의 영향을 받지 않아 저장이 빠르다.
profile
[DATABASE] 비전공자 출신의 개발 도전!

0개의 댓글