인덱스

김맥스·2023년 3월 28일

데이터베이스

목록 보기
3/3
post-thumbnail

개념

  • DBMS의 검색 속도를 높이기 위한 기술
  • DBMS는 데이터를 순차적으로 쌓으므로, 특정 데이터를 찾기 위해서는 데이터의 FULL-SCAN인 순차 탐색(O(N))이 필요
  • 우리가 책의 목차를 참고하여 필요한 내용으로 곧 바로 넘어가듯이, DBMS도 인덱스 테이블에서 특정 인덱스를 찾아 필요한 행 데이터를 바로 가져오는 것

인덱스 장점

  1. 빠른 조회
    • 인덱스 테이블은 메모리에 저장되어 있는 B+트리 자료구조
    • 메모리는 한정적인 자원이기 때문에 DBMS는 인덱스로 지정한 컬럼 데이터와 ROW-ID로 구성된 최소한의 노드로 B+트리를 구성한다
  2. 데이터 정렬
    • 만약 인덱스된 컬럼으로 정렬 명령을 내린다면 정렬 비용을 아낄 수 있다. B+트리 구조상 조회된 데이터를 가져오기만 해도 정렬된 데이터를 획득할 수 있기 때문

인덱스를 사용하면 좋은 경우

  • where 절에서 자주 사용되는 Column
  • 외래키에 사용되는 Column
  • Join에 자주 사용되는 Column

인덱스 단점

  1. 인덱스 테이블 유지 비용
    • B+트리의 중요한 특징 중 하나는 균형 이진 트리를 구성한다는 점
    • 노드의 삭제, 삽입시 트리 균형을 위해 트리 구조를 재구성 하는 비용이 발생
    • 더군다나 탐색 이진 트리의 업데이트는 삭제 + 삽입 과정이 발생하므로 2배의 비용이 발생
    • 위의 B+트리의 특징이 인덱스 테이블에도 똑같이 적용
    • 즉, O(log_2)으로 빠르게 조회가 가능하지만 삽입, 삭제, 업데이트 작업은 노드의 위치 탐색 비용 + 트리 재구성 비용 이 발생
  2. 인덱스 테이블 추가 공간 비용
    • 인덱스 테이블이 거대해짐에 따라, 트리의 높이가 깊어지는 문제
    • 테이블의 행 개수 보다 많은 개수의 저장공간을 필요로 함
    • 인덱스 테이블 의 깊은 높이는 DBMS 성능을 점진적으로 내린다
    • 미 사용 노드를 트리에서 제거함으로써 높이 최적화가 필요함

인덱스를 피해야 하는 경우

  • 데이터의 중복도가 높은 Column
  • B+트리 구조를 사용하고 있으므로 조회보다 삽입, 삭제, 업데이트가 더 많이 발생하는 테이블은 인덱스 기능이 오히려 단점이 될 수 있음

인덱스 설정

  • PRIMARY_KEY를 지정한 컬럼은 자동적으로 PRIMARY_KEY를 기준으로 인덱스 테이블이 생성
  • 만약 다른 컬럼을 인덱스 테이블을 생성하고 싶다면, 직접 생성해야
profile
3년차 백엔드 개발자의 공부 기록

0개의 댓글