Updated:

1 minute read

개요

  • 데이터의 위치를 가리키는 자료구조
  • n개의 컬럼에 대해 정렬하여 키와 레코드 포인터를 저장


장점

  • 모든 행을 검색(full table scan)하지 않으므로 조회 속도 향상
  • 데이터가 정렬되어 있으므로 where, order by, min, max 등의 성능 향상


단점

  • 인덱스 관리를 위한 저장 공간 필요
  • 삽입, 수정, 삭제 시 인덱스 관리를 위한 오버헤드 발생
  • 수정, 삭제 시 인덱스를 삭제하지 않고 사용하지 않음으로 처리하기 때문에 수정, 삭제가 빈번할 경우 오히려 성능 하락 가능성 존재


인덱싱 종류

  • clustered
    • 레코드의 물리적 순서를 지정
    • 물리적 순서가 지정되므로 Clustered index는 하나만 생성 가능
    • 따로 설정하지 않을 경우 기본키 설정 시 자동으로 생성
    • 테이블 자체가 인덱스 페이지
    • 저장 순서와 순차적 혹은 역순으로 액세스 하는 경우 검색 속도 크게 향샹
    • non-clustered에 비해 조회는 빠르지만 삽입, 수정, 삭제는 느림
    • 수정이 빈번하지 않거나 범위(MAX, MIN, COUNT 등), group by 등의 조회를 자주하는 경우에 유리
  • non-clustered
    • 레코드의 논리적 순서를 지정
    • 데이터의 위치를 가리키는 별도의 인덱스 페이지 생성
    • n개 생성 가능
    • clustered에 비해 조회는 느리지만 삽입, 수정, 삭제는 빠름
    • 수정이 빈번하거나 조건(where, join) 조회를 자주하는 경우 유리
  • cluster
    • 멀티 데이터베이스와 멀티 테이블이 조인된 경우 사용
    • 클러스터 키 값을 공유하는 테이블의 레코드를 동일하거나 가까운 데이터 블록에 저장함으로써 I/O 오버헤드를 줄여 조인 성능 향샹


종류

  • bitmap index
    • 데이터를 비트맵에 저장하여 동작하는 인덱스
    • 데이터가 한정(성별 등)되어 있고 자주 사용되는 경우 유용
  • dense index
    • 모든 레코드에 대한 키와 포인터 쌍을 가진 파일을 이용하는 인덱스
  • sparse index
    • 모든 블록에 대한 키와 포인터 쌍을 가진 파일을 이용하는 인덱스
  • reverse index
    • 키를 뒤집어서 인덱싱
    • 시퀀스 번호인 경우 유용
  • primary index
    • 테이블의 키 필드와 키가 아닌 필드에 대한 포인터를 포함
    • 테이블이 생성될 때 자동으로 생성
  • secondary index
    • 키 필드가 아닌 필드를 인덱싱하는데 사용
  • hash index
    • 해시를 이용하여 인덱싱