[DB] 인덱스

안녕하·2023년 11월 22일
0

데이터베이스

목록 보기
14/21

인덱스

  • DB 테이블 조회 속도를 높여주는 정보

  • 컬럼 값과 레코드 주소를 key와 value로 저장

  • 항상 정렬된 상태

  • 데이터의 조회는 빠르지만 저장(삽입, 수정, 삭제)는 느림

    • 손익 분기점을 적절하게 찾아야 함



인덱스 동작 방식

  1. 조건을 만족하는 레코드를 찾기 위해 루트노드부터 브랜치 노드, 리프 노드를 거쳐 해당하는 리프 노드를 검색

  2. 검색한 리프 노드에 있는 레코드 주솟값을 따라 데이터 파일에서 레코드 조회


인덱스 장점과 단점

장점

  • 테이블 조회 속도와 성능 향상
    • 정렬되어 있어 원하는 값을 빨리 조회(SELECT)를 처리할 수 있음
    • 테이블 스캔이 더 나은 경우도 있음
  • 시스템 부하 감소

단점

  • 데이터의 저장 (INSERT, UPDATE, DELETE) 과정 복잡하고 느림
  • 추가 저장 공간 필요
    • 인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요함
  • 인덱스를 관리하기 위해 추가 작업 필요



인덱스를 사용하는 경우

  • WHERE 절에 자주 사용되는 컬럼

  • 외래키가 사용되는 컬럼

  • 규모가 작은 테이블

  • DML(INSERT, UPDATE, DELETE)가 자주 발생하지 않는 컬럼

  • JOIN, WHERE, ORDER BY 절에 자주 사용되는 컬럼

  • 데이터 중복도가 낮은 컬럼 (높은 카디널리티)
    • 검색 대상이 줄어들어 빠른 조회 가능



잘 동작하는지 확인하는 법

  1. 실행 계획 분석
  2. 인덱스 통계 확인
  3. 인덱스 힌트 사용
  4. 시스템 로그 확인
  5. 인덱스 리빌드



인덱스 사용 시 주의점

  1. 과도한 인덱스 생성

    • 필요한 컬럼에만 생성해야 함
    • 데이터가 변경될 때마다 인덱스도 갱신됨 > 인덱스 개수가 많다면 성능 저하
  2. 적절한 인덱스 선택

    • 자주 사용되는 쿼리에서 사용되는 인덱스로 선택



인덱스 분류

역할별로 분류

  1. 프라이머리 키
  2. 세컨더리 인덱스

프라이머리 키

  • 튜플을 대표하는 컬럼의 값으로 만들어진 인덱스
  • 해당 튜플을 식별하므로 식별자라고 부른다
  • NULL 비허용

세컨더리 인덱스

  • PK를 제외한 나머지 인덱스

데이터 저장 방식(알고리즘)별로 분류

  1. B-Tree 인덱스

1-1. R-Tree 인덱스

  1. Hash Index

  2. Fractal-Tree


B-Tree 인덱스

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

R-Tree 인덱스

  • B-Tree와 흡사
  • B-Tree의 인덱스 컬럼 값: 1차원 스칼라 값
  • R-Tree의 인덱스 컬럼 값: 2차원의 공간 개념 값
  • GPS 기반 서비스를 구현하는 데 사용 (공간 데이터 검색)

Hash 인덱스

  • 컬럼의 값으로 해시값을 계산해 인덱싱
  • 매우 빠른 검색 지원
  • 값을 변형해서 인덱싱하므로 prefix 일치와 같이 값의 일부만 검색하거나 범위를 검색할 때는 사용할 수 없음
  • 메모리 기반의 데이터베이스에서 많이 사용

기능별로 분류

  1. 전문 검색용 인덱스
  2. 공간 검색용 인덱스

데이터 중복 허용 여부로 분류

  1. unique 인덱스
  2. non-unique 인덱스



출처: Real MySQL 8.0(1권)

profile
세요

0개의 댓글