2026-03-08

인덱스(Index)란

인덱스(Index)란?

데이터베이스에서 검색 속도를 빠르게 하기 위해 사용하는 자료구조

image.png

  • 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조
SELECT *
FROM user
WHERE name = 'kim'
  • 인덱스 없으면 테이블 전체를 스캔 (Full Table Scan)
  • 인덱스 있으면 빠르게 위치 찾기

인덱스 내부 구조

대부분 DB는 B+Tree 구조 사용

  • 실제 데이터는 리프 노드에만 존재
  • 리프 노드가 Linked List 형태로 연결
  • Redis는 해시테이블 사용

특징

  • 정렬된 구조
  • 이진 탐색처럼 빠르게 검색
  • 시간 복잡도 O(log n)

인덱스 장점

  • 조회 속도 향상
  • 정렬 속도 향상
  • WHERE 조건 검색 빠름
WHERE
JOIN
ORDER BY

인덱스 단점

  • 연산을 추가적으로 해줘야 해 그에 따른 오버헤드가 발생
    • INSERT: 새로운 데이터에 대한 인덱스를 추가함
    • UPDATE: 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스를 추가함
    • DELETE: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행함
  • 저장공간 추가 사용

인덱스를 쓰면 좋은 경우

  • WHERE 조건에 자주 사용
  • JOIN 조건
  • ORDER BY
  • 데이터가 많은 테이블

인덱스 쓰면 안 좋은 경우

  • 데이터가 매우 적은 테이블
  • INSERT, UPDATE, DELETE가 매우 많은 컬럼
  • 중복값이 많은 컬럼
  • 예시
    gender
    true / false
    

참고자료

  • https://mangkyu.tistory.com/96
  • https://velog.io/@bagt/DB-Index%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
  • https://coding-factory.tistory.com/746
  • https://ittrue.tistory.com/331

results matching ""

    No results matching ""