본문 바로가기
DB

DB - 인덱스

by 개발자 포비 2024. 12. 3.

데이터베이스 인덱스 개요

1. 인덱스란?

인덱스는 데이터베이스에서 데이터를 빠르게 검색할 수 있도록 도와주는 자료구조입니다. 특정 열(컬럼)에 대한 포인터를 저장하여 데이터를 효과적으로 찾을 수 있게 해줍니다. 인덱스는 데이터베이스의 성능을 최적화하는 중요한 역할을 합니다.

2. 인덱스의 종류

  • 클러스터형 인덱스 (Clustered Index):

    • 데이터가 물리적으로 정렬되어 저장됩니다.
    • 각 테이블에 하나만 존재할 수 있으며, 주로 기본 키에 설정됩니다.
    • 검색 시 직접 데이터에 접근할 수 있어 성능이 우수합니다.
    • 설계 방식: 일반적으로 B-트리 또는 B+트리 구조를 사용하여 구현됩니다. 이 구조는 데이터의 삽입, 삭제 및 검색이 효율적입니다.
  • 비클러스터형 인덱스 (Non-Clustered Index):

    • 데이터와 인덱스가 별도로 저장됩니다.
    • 여러 개의 비클러스터형 인덱스를 생성할 수 있습니다.
    • 인덱스를 통해 포인터를 사용하여 실제 데이터에 접근하므로, 추가적인 오버헤드가 발생할 수 있습니다.
    • 설계 방식: 비클러스터형 인덱스도 B-트리 구조를 사용하지만, 인덱스 자체에 데이터 포인터를 포함하여 실제 데이터의 위치를 참조합니다.

3. 인덱스의 장점과 단점

  • 장점:

    • 데이터 검색 속도 향상: 인덱스를 통해 필요한 데이터에 빠르게 접근할 수 있습니다.
    • 정렬 및 범위 검색 성능 개선: 데이터가 정렬되어 있어 ORDER BY 및 범위 쿼리에서 성능이 좋습니다.
  • 단점:

    • 추가적인 저장 공간 필요: 인덱스는 데이터베이스 크기에 따라 추가적인 용량을 차지합니다.
    • 데이터 삽입, 수정, 삭제 시 성능 저하 발생 가능: 각 변경 작업 시 인덱스도 업데이트해야 하기 때문에 오버헤드가 발생합니다.
    • 조각화로 인한 성능 저하: 데이터 변경이 빈번할 경우 인덱스가 조각화되어 성능이 저하될 수 있습니다.

4. 인덱스 설정 고려사항

  • 데이터 삽입 및 삭제가 빈번한 경우, 인덱스가 성능 저하를 초래할 수 있습니다.
  • 조회가 적고 변경이 많은 환경에서는 인덱스를 최소화하거나 제거하는 것이 좋습니다.
  • 인덱스를 설정할 때는 어떤 컬럼에 인덱스를 설정할지, 어떤 쿼리에서 성능 향상을 기대할 수 있는지를 고려해야 합니다.

5. 테스트 방법

  • Mock 데이터 생성: 실제 환경과 유사한 데이터를 생성하여 테스트합니다. 데이터의 양, 분포, 패턴을 고려합니다.
  • 쿼리 성능 테스트: 다양한 쿼리를 실행하여 인덱스의 효과를 분석합니다. 조회, 삽입, 삭제 등 여러 유형의 쿼리를 테스트합니다.
  • 성능 모니터링: 쿼리 실행 시간, CPU 사용량, 메모리 사용량 등을 모니터링하여 인덱스 설정이 성능에 미치는 영향을 정량적으로 분석합니다.
  • 조정 및 최적화: 테스트 결과를 바탕으로 인덱스 설정을 조정하고, 필요 없는 인덱스는 제거하거나 추가적인 인덱스를 설정하는 등의 최적화를 진행합니다.

결론

인덱스는 데이터베이스 성능을 최적화하는 데 중요한 역할을 합니다. 따라서 인덱스를 적절히 설계하고 테스트하여 최적의 성능을 유지하는 것이 필요합니다. B-트리와 같은 구조를 이해하고 활용하는 것이 인덱스의 효율성을 높이는 데 도움이 됩니다.

'DB' 카테고리의 다른 글

트랜잭션 동작 방식과 스프링의 트랜잭션 동작 방식  (1) 2024.12.06
DB N-N관계 풀어내기 예제  (0) 2024.12.06
DB - MySQL 기본 문법 정리  (0) 2024.12.02
DB - 정규화  (0) 2024.11.28
DB - 관계형 데이터 모델링 (3)  (1) 2024.11.28

댓글