인덱스

아빠는 외계연·2023년 2월 2일
0

Study

목록 보기
4/11
post-custom-banner

인덱스란

  • 색인과 같은 것
  • 검색속도를 향상시키기 위해 데이터를 정렬시켜놓는 방식
  • 방법
    • 클러스터링 인덱스
      • 실제 데이터를 정렬시키는 방식
      • 테이블 당 하나만 존재 가능
    • 논 클러스터링 인덱스
      • 새로운 저장공간에 추가로 인덱스를 생성하는 방식
      • 실제 데이터 테이블은 그대로. 별도의 인덱스 테이블 생성
      • unique index : 중복 허용 안함
      • default index : 중복 허용
        => 총 정리 + 클러스터링 인덱스 : 책 페이지를 직접 펴는 것. + 논 클러스터링 인덱스 : 앞의 목차를 보고 찾는 것. + 풀 테이블 스캔 : 하나하나 찾는 것
  • 자료 구조
    • B- tree
      • 데이터를 리프노드 뿐 아니라 브랜치 노드에도 저장시키는 방식
    • B+ tree
      • 데이터를 리프노드에만 저장시키는 방식
      • 리프 노드끼리는 linked-list 방식으로 연결되어 있음
      • 브랜치 노드에는 데이터를 넣지 않기에 좀 더 높은 cache hit 가능
      • 풀 스캔 시 리프노드만 스캔하면 되므로 효율적
      • 데이터가 이어져 있기 때문에 범위검색 시 효율적
    • Hash Table
      • Hash 함수를 거쳐 나온 값을 인덱스 테이블로 생성
      • 범위 검색은 불가능. 동등 검색만 가능
  • 효율적인 방법
    • where 문에 자주 사용되는 컬럼을 적용시키면 성능 향상
  • 쓰면 안되는 경우
    • 매핑 카디널리티가 낮은 경우 == 값 중복이 많은 경우
    • update/delete가 잦은 컬럼일 경우 -> 인덱스 테이블까지 변경시켜줘야 함
    • 인덱스 테이블 + 리프 노드까지 두번의 데이터 접근이 필요함
  • 데이터 가공 시 인덱스를 타지 않는다.
    • ex) date_format(reg_date, '%Y-%m-%d')
    • 따라서 이런식으로 인덱스를 적용 시 비효율적
    • 함수를 사용하는 것이 비효율 적이기에 between 대신에 >=, <= 와 같은 연산자를 사용
profile
Backend Developer
post-custom-banner

0개의 댓글