본문 바로가기

데이터베이스

Index란?

  • Index 란 무엇인가
  • Index 의 자료구조
  • Primary index vs Secondary index
  • Composite index
  • Index 의 성능과 고려해야할 사항

Index란 ?

  • 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스안에 테이블의 검색 속도를 향상시키기 위한 자료구조
  • 칼럼의 값과 해당 레코드가 저장된 주소를 키와 값의 쌍으로 인덱스를 만들어서 사용함Untitled
  • CREATE시에 추가 인덱스와 이에 해당하는 값이 저장됨
  • UPDATE는 기존 인덱스를 계속 사용할거라 생각하지만 아님. 변경이 일어나면 기존 인덱스를 사용하지 않음 상태로 두고 새로운 인덱스를 부여해서 값을 저장함
  • DELETE는 기존 인덱스를 삭제하지 않고 사용하지 않음 상태로 만듦
    • 왜 기존거를 사용하지 않고 새로 부여하는지와 삭제시에는 왜 바로 삭제하지 않는지 궁금점이 생길 수 있음
    • 해시 테이블의 이유는 성능최적화, 트랜잭션의 용이성, 데이터복구의 용이성 등이 있음
    • b+ tree의 이유도 위와 비슷함. 다른점은 트리를 재조정 해야하기 때문에 즉각적인 삭제는 오버헤드가 큼. 따라서 피크 타임이 아닌 시간에 관리자가 수동으로 일괄처리 하거나, 시스템 내부에서 함
    • 추가적으로 해시는 등가 검색에 유리하고 트리는 범위 검색에 유리함
      • 등가: 하나 찾기
      • 범위: 범위로 찾기
  • 추가적으로 자료 찾기
    • 인덱스에 추가적인 공간이 사용되는데 이럼에도 사용되는 이유(트레이드 오프)
    • Data warehouse에서도 index기능을 사용하는지?

Primary Index vs Secondary Index

  1. Primary Index(영어 사전)
    Untitled
    • Index가 정렬된 기준이 실제 물리적 데이터가 정렬된 기준과 일치
    • 실제 데이터가 정렬되어 있기에 sequential scan이 효율적
    • 데이터가 순서대로 정렬되어 있기 때문에 range query에 유리
    • dense
      • 1:1 맵핑
    • sparse
      • 대표값만 맵핑 (1로 들어가서 1~100 맵핑)
  2. Secondary Index
    Untitled
    • Index가 정렬된 기준과 실제 물리적 데이터가 정렬된 기준과 일치하지 않음
    • Range query를 수행할 수 있지만 비효율적
  3. Composite Index
    Untitled
    • 두 개 이상의 컬럼을 결합하여 생성된 인덱스임
    • 여러 필드를 기반으로 데이터베이스 테이블에서 데이터를 빠르게 검색하고, 검색 쿼리의 성능을 향상시키기 위해 사용됨

4. 인덱스 고려사항

  • 인덱스 관리 비용: 데이터 삽입, 삭제, 수정 작업이 자주 발생하는 테이블에 대한 인덱스는 성능 저하를 초래할 수 있습니다. 이는 인덱스가 변경될 때마다 추가적인 작업을 수행하기 때문
  • 저장 공간 사용: 인덱스는 추가적인 디스크 공간을 차지함 따라서 불필요한 인덱스는 공간 낭비를 할 수 있음
  • 선택적 사용: 모든 컬럼에 인덱스를 사용하는 것이 아니라 조회에 자주 사용되는 컬럼에 한정하여 인덱스를 적용하는 것이 효과적임
  • 인덱스 설계: 복합 인덱스를 포함하여 인덱스를 설계할 때는 쿼리 패턴을 면밀히 분석하고 데이터의 특성과 어플리케이션의 요구 사항을 고려해야 함