💡 요약

  • Index란
    • 키 값으로 행 데이터의 위치를 식별하는데 사용하는 색인
  • 장점
    • 검색 속도 향상
  • 단점
    • Index도 저장해야해서 저장 공간 차지
    • DML 작업은 성능 저하
  • 동작 방식
    • 주로 범위 검색에 용이한 B+ tree 를 사용



1. DB Index란

  • 정의
    • 색인
    • 키 값으로 행 데이터의 위치를 식별하는데 사용하는 기능
  • 목적 : RDB에서 검색 속도를 높이기 위한 기술
  • 특징
    • 칼럼의 값과 해당 레코드가 저장된 주소를 키와 값의 쌍으로 인덱스를 만듦
    • 항상 정렬된 상태를 유지 -> 검색은 빠르지만, DML은 느림
    • PK는 자동으로 Index가 생성됨
  • 활용
    • Where절의 조건이나 Join 조건에 사용될 때 성능이 향상됨

      💡 DB Index와 Join

      • Join 조건에 있는 열이 Index로 지정되어 있으면 DB는 인덱스를 사용하여 Join 작업을 수행하여 효율적으로 처리
  • 방식
    • Table의 Column을 색인화하여 따로 파일로 저장
    • 해당 Table의 Record를 Full Scan 하지 않고, 색인화된 Index 파일을 검색하여 검색 속도를 향상시킴
      • Index Table에서 Where에 포함된 값을 검색
      • 해당 값의 table_id PK를 획득
      • table_id PK값으로 원본 테이블에서 값을 조회
  • 과정
    • Table을 생성하면, FRM, MYD, MYI 3개의 파일이 생성됨

      💡 FRM, MYD, MYI

      • MySQL DB에서 사용되는 파일 확장자
      확장자 설명
      FRM(Format) 테이블 구조가 저장되어 있는 파일
      MYD(Data) 실제 데이터가 있는 파일
      MYI(Index) Index 정보가 들어 있는 파일
      Index를 사용하는 경우에만 생성됨
    • 사용자가 Select 쿼리로 Index를 사용하는 Column을 탐색하면, MYI 파일을 검색하여

  • 장점
    • 검색과 정렬 속도 향상
  • 단점
    • Index를 생성하면 .mdb 파일의 크기가 증가
    • Index된 Field에서 DML(Update, Insert, Delete)의 성능 저하
      • 인덱스를 유지하고 업데이트하는 과정이 추가적인 오버헤드를 발생시킴
      • Insert : Index Split 현상이 발생할 수 있어 성능에 불리
      • Delete : 데이터를 삭제하면 Table에서는 삭제되지만 Index에서는 논리적인 삭제만 되어 Index가 물리적인 공간을 차지함
      • Update : Index에는 Update가 없기 때문에 Delete 후 Insert
    • 데이터 변경 작업이 자주 발생하는 경우 Index를 재작성하여 성능에 영향
  • Index 설계시 고려사항
    • 사용하면 좋은 경우
      • Where 절에서 자주 사용되는 Column
      • 외래키가 사용되는 Column
      • Join에 자주 사용되는 Column
    • 사용을 피해야 하는 경우
      • Data 중복도가 높은 Column(카디널리티가 낮은 컬럼)
      • DML이 자주 일어나는 Column



2. Index의 자료구조

B+ Tree


  • 일반적으로 사용되는 인덱스 알고리즘
  • Column의 값을 변형하지 않고 원래의 값을 이용해 인덱싱하는 알고리즘


💡 B+ Tree

  • Binary Search Tree : 값이 정렬되어 있는 경우 절반씩 소거하며 검색할 수 있도록 돕는 자료 구조
  • B-tree : 분기점을 여러 개 설정하여 Binary Search Tree보다도 검색 속도를 향상
  • B+tree
    • 데이터는 리프노드 노드에만 보관
    • 리프노드가 아닌 노드는 값을 찾기 위한 가이드만 제공
    • 리프노드끼리 연결리스트로 연결되어 있어 범위 검색에 용이



Hash 인덱스


  • 칼럼의 값으로 해시 값을 계산해서 인덱싱하는 알고리즘
  • 장점 : 매우 빠른 검색을 지원
  • 단점 : 값을 변형해서 인덱싱하여 특정 문자로 시작하는 값으로 검색을 하는 전방 일치와 같이 값의 일부만으로 검색하고자 할 때는 해시 인덱스를 사용할 수 없음
    • Hash Table은 시간복잡도가 O(1)으로 효율적이지만, 동등연산에만 특화됨



트리에 대해서 더 공부해야겠다!
그리고 DB Index를 설정하는 방법에 대해서도 알아봐야겠다.



참고 자료



Leave a comment