개발 지식/데이터베이스

데이터베이스 성능의 핵심 | 인덱스와 복합 인덱스란 무엇인가?

Parse 2025. 1. 13. 20:08

데이터베이스를 사용하는 애플리케이션 개발에서 성능 문제를 겪다 보면, 가장 먼저 떠오르는 해결책 중 하나가 인덱스(Index)입니다. 인덱스는 데이터를 효율적으로 검색할 수 있도록 돕는 핵심적인 기능인데, 그중에서도 복합 인덱스(Composite Index)는 복잡한 쿼리를 최적화하는 데 매우 유용합니다. 이번 글에서는 인덱스와 복합 인덱스가 무엇인지, 그리고 실제로 어떻게 활용할 수 있는지에 대해 알아보겠습니다.

인덱스란?

인덱스(Index)는 데이터베이스에서 데이터를 빠르게 검색하기 위해 사용하는 자료구조입니다. 책의 목차처럼, 인덱스는 테이블에서 특정 데이터를 찾는 데 필요한 정보를 제공해 줍니다.

인덱스의 작동 방식

  • 테이블이 생성되면, 기본적으로 모든 데이터는 정렬되지 않은 상태로 저장됩니다.
  • 인덱스를 생성하면, 데이터베이스는 특정 컬럼(또는 컬럼들)의 값을 기반으로 별도의 자료구조(예: B-Tree, Hash 등)를 생성합니다.
  • 쿼리를 실행할 때, 데이터베이스는 이 인덱스를 참조하여 데이터를 검색하므로, 테이블 전체를 스캔하는 것보다 훨씬 빠르게 결과를 반환할 수 있습니다.

인덱스의 장점

  • 조회 속도 향상: SELECT 쿼리에서 데이터를 검색하거나 정렬하는 속도가 비약적으로 빨라집니다.
  • WHERE 절 성능 개선: 특정 조건으로 데이터를 필터링할 때 성능이 향상됩니다.
  • ORDER BY 최적화: 정렬 쿼리에서 인덱스를 활용하면 추가적인 정렬 작업이 필요 없어집니다.

인덱스의 단점

  • 삽입/수정/삭제 작업 성능 저하: 인덱스를 유지하기 위해 추가적인 작업이 필요하므로, 쓰기 작업이 느려질 수 있습니다.
  • 공간 사용량 증가: 인덱스는 별도의 저장 공간을 차지합니다.

복합 인덱스란?

복합 인덱스(Composite Index)두 개 이상의 컬럼을 결합하여 만든 인덱스입니다. 단일 인덱스가 하나의 컬럼만을 대상으로 하는 반면, 복합 인덱스는 여러 컬럼을 조합하여 데이터 검색 속도를 향상 시킵니다. 주로 테이블 전체를 스캔(FULL TABLE SCAN)하는 문제가 있다면 복합 인덱스 적용을 고려해볼만 합니다.

복합 인덱스의 장점

여러 조건의 조합 처리: WHERE 절에서 여러 컬럼을 동시에 필터링할 때 성능이 크게 개선됩니다.

정렬 및 범위 검색 최적화: 복합 인덱스를 활용하면 다중 컬럼 정렬 및 범위 검색에서 성능이 향상됩니다.

복합 인덱스 생성 방법

복합 인덱스는 다음과 같이 생성할 수 있습니다

CREATE INDEX idx_user_created_at ON users (user_id, created_at);
--이 인덱스는 user_id와 created_at 두 컬럼을 기준으로 정렬된 구조를 만듭니다.

복합 인덱스의 주의점

  • 컬럼 순서가 중요: 복합 인덱스는 생성된 순서에 따라 작동합니다. 예를 들어, 위 인덱스는 user_id를 먼저 필터링한 후, created_at으로 검색합니다. 따라서 created_at만 사용하는 경우에는 이 인덱스가 활용되지 않을 수 있습니다.
  • 적절한 컬럼 선택: 조회 빈도가 높은 컬럼이나, 카디널리티(고유 값의 개수)가 높은 컬럼을 우선적으로 고려해야 합니다.

복합 인덱스를 설계 팁

  1. 쿼리 패턴 분석
    WHERE와 ORDER BY 조건에 사용되는 컬럼을 기준으로 설계.
  2. 카디널리티 고려
    고유 값의 개수가 많고 필터링 효과가 높은 컬럼을 복합 인덱스의 첫 번째 컬럼으로 설정.
  3. 실행 계획 확인
    EXPLAIN PLAN을 통해 쿼리가 인덱스를 제대로 활용하는지 반드시 확인.

복합 인덱스는 데이터베이스 최적화에서 강력한 도구이지만, 모든 상황에서 효과적인 것은 아닙니다. 조회 성능 개선은 일어나지만 생성,수정,삭제 등의 작업에서는 성능 저하가 발생할 수 있어서 조회 기능 보다 수정 작업이 많다면 인덱스 적용을 고려해봐야합니다.

쿼리 패턴과 카디널리티를 고려해서 복합 인덱스 설정을 고려해보세요 😄