인덱싱

Hyeok·2025년 4월 24일

인덱스 장점

  • 검색 성능 향상 (쿼리 속도 개선)
    검색할 때 전체 테이블을 뒤지는 것이 아니라,
    인덱스를 이용해 빠르게 원하는 데이터를 찾을 수 있음.
    전체 조회는 시간 복잡도가 O(n) 이었다면, 인덱스를 부여한 이후에는
    인덱스 구조가 B-Tree (이진탐색트리 계열)이라서 O(log n) 으로 줄어듬.
    WHERE, ORDER BY, JOIN 등의 연산에서 성능 향상.

인덱스 단점

  • 쓰기 성능 저하
    INSERT, UPDATE, DELETE 작업 시, 해당 데이터의 인덱스도 함께 수정해야 해서 성능 저하가 발생함. 대량의 데이터 삽입/삭제 시 더욱 두드러짐.

  • 디스크 공간 소모
    인덱스는 별도의 자료구조로 저장되므로, 추가적인 디스크 공간을 차지함.

어떤 상황에서 인덱스를 사용해야 할까?

  • 자주 조회되는 컬럼
    자주 검색되는 컬럼에는 인덱스를 사용하는 게 유리.

  • JOIN 연산
    JOIN을 많이 사용하는 테이블에서 연결할 키(보통 ID나 외래키)에 인덱스를 추가하면 성능이 향상됨.

  • ORDER BY, GROUP BY 연산
    정렬이 많이 필요한 경우, 해당 컬럼에 인덱스를 추가하면 빠르게 결과를 반환할 수 있음.

  • 범위 검색
    BETWEEN, >=, <= 같은 범위 검색에서 인덱스가 효율적임.
    예: age, created_at 등 날짜나 숫자 범위 검색에 유리.

인덱스를 피해야 할 상황

  • 자주 변경되는 컬럼
    자주 업데이트되거나 삭제되는 컬럼에는 인덱스를 피하는 게 좋음.

예: last_updated_at, status 같은 컬럼은 변경이 잦을 수 있기 때문에, 인덱스를 계속 갱신하는 비용이 크다.

  • 작은 테이블
    데이터가 적은 테이블에서는 인덱스가 오히려 성능을 떨어뜨릴 수 있음.
    전체를 스캔하는 게 더 빠를 수 있기 때문.

결론

인덱스 사용 성능을 주기적으로 점검하고, 사용되지 않는 인덱스는 제거하는 게 중요해 보인다.
이론으로만 학습해봤는데 성능 테스트를 직접 진행해봐야겠다. B-Tree 인덱스가 기본이고 Hash 인덱스, Bitmap 인덱스 등에 대해서도 학습해 볼 필요가 있을듯하다.

profile
공부하면서 정리한 블로그입니다. 혹시 잘못된 내용이 있다면 댓글로 알려주시면 큰 도움이 됩니다. 감사합니다!

0개의 댓글