[데이터베이스구축] 인덱스

thingzoo·2024년 2월 11일
0
post-thumbnail

색인(Index)

인덱스의 개념

  • 데이터 레코드를 빠르게 접근하기 위해 <키값, 포인터>쌍으로 구성된 데이터 구조
  • 데이터베이스에서 검색 성능을 향상시키기 위해 미리 정렬해 놓는 기법
  • 테이블과 클러스터에 연관되어 독립적인 저장 공간 보유
  • 특정 열이나 열집합에 대한 빠른 검색 가능
  • 추가는 'CREATE', 삭제는 'DROP'

인덱스의 목적

  • 대규모 테이블에서의 빠른 데이터 추출
  • 조건 검색, 정렬, MIN/MAX 처리의 효율성 향상
  • JOIN 시 열 추출 효율성

인덱스의 종류

클러스터 인덱스(Clustered Index)

  • 테이블당 1개만 허용, 해당 컬럼을 기준으로 테이블이 물리적으로 정렬
  • 데이터는 기본적으로 오름차순 정렬
  • 기본키 설정 시 자동으로 클러스터 인덱스 적용
  • 인덱스 자체의 리프 페이지가 곧 데이터
  • 데이터 입력/수정/삭제 시 항상 정렬 상태 유지
  • 비클러스터형 인덱스보다 검색은 빠르지만, 입력/수정/삭제 느림

비클러스터 인덱스(Non-Clustered Index)

  • 테이블당 약 240개의 인덱스 생성 가능
  • 레코드의 원본은 정렬되지 않고 인덱스 페이지만 정렬
  • 인덱스 자체의 리프 페이지는 데이터가 아니라 데이터가 위치하는 포인터이기 때문에
  • 클러스터형보다 검색은 느리지만 입력/수정/삭제 빠름
  • 인덱스를 생성할 때 데이터 페이지는 그냥 둔 상태에서 별도의 인덱스 페이지를 따로 생성하기때문에 용량 더 차지

밀집 인덱스

  • 데이터 레코드 각각에 대해 하나의 인덱스 생성

희소 인덱스

  • 레코드 그룹 또는 데이터 블록에 대해 하나의 인덱스 생성

인덱스의 구조

트리 기반 인덱스

  • 대부분의 상용 DBMS에서는 트리 구조를 기반으로 하는 B+ 트리 인덱스를 주로 사용

비트맵 인덱스

  • 비트(0/1)를 이용하여 컬럼값을 저장하고 이를 이용해 주소를 자동으로 생성

함수 기반 인덱스

  • 함수나 수식으로 계산된 결과에 대해 트리 인덱스나 비트맵 인덱스를 생성, 사용할 수 있는 기능 제공

비트맵 조인 인덱스

  • 비트맵 조인 인덱스의 물리적인 구조는 비트맵 인덱스와 동일
  • 인덱스의 구성 컬럼이 베이스 테이블의 컬럼값이 아니라 조인된 테이블의 컬럼값이라는 차이

도메인 인덱스

  • 개발자가 자신이 원하는 인덱스를 직접 만들어 사용하는 것(확장형 인덱스)

해시 인덱스

  • 값이 고유하고 분포가 균일한 경우 유용

인덱스 컬럼(필드)의 선정⭐️

  • 검색을 자주 하는 컬럼
  • 정렬의 기준이 자주 되는 컬럼
  • 기본키 및 외부키가 되는 컬럼
  • OLE 개체 형식의 컬럼은 불가능
  • 분포도가 좋은(10~15% 이내) 컬럼
  • 가능한 수정이 빈번하지 않은 컬럼
  • ORDER BY, GROUP BY, UNION이 빈번한 컬럼
  • 자주 조합되어 사용되는 경우 결합 인덱스를 생성
  • 한 컬럼이 여러 인덱스 포함되지 않도록 설계

인덱스 생성 시 고려사항⭐️

  • 새로 추가되는 인덱스는 기존 액세스 경로에 영향을 미칠 수 있음
  • 지나치게 많은 인덱스는 오버헤드 발생
  • 넒은 범위 인덱스 처리 시 많은 오버헤드 발생
  • 인덱스만을 위한 추가적인 저장 공간 필요
  • 인덱스와 테이블 데이터의 저장공간이 분리되도록 설계
  • 옵티마이저를 위한 통계 데이터를 주기적으로 갱신
profile
공부한 내용은 바로바로 기록하자!

0개의 댓글