본문 바로가기
Database

복합 인덱스 사용 가이드: 최적의 성능을 위한 인덱스 생성과 활용 방법

by 떡쇠 2024. 6. 23.
반응형

데이터베이스 성능 최적화를 위해 인덱스를 잘 활용하는 것은 매우 중요하다. 특히 복합 인덱스를 잘 활용하면 쿼리 성능을 크게 향상시킬 수 있다. 이번 글에서는 복합 인덱스를 효율적으로 사용하기 위한 기준에 대해 정리해본다.


복합 인덱스란?

복합 인덱스는 여러 컬럼을 하나의 인덱스로 묶은 것이. 예를 들어, orders 테이블에 customer_id와 order_date 컬럼에 대해 복합 인덱스를 생성할 수 있다.

CREATE INDEX idx_orders_customer_date ON orders (customer_id, order_date);

-- CREATE INDEX 인덱스명 ON 테이블명(column1, column2)

복합 인덱스 생성 기준

  • 조회 빈도: 자주 조회되는 컬럼들을 인덱스로 생성한다. (WHERE 절, JOIN 절, ORDER BY, GROUP BY 등에 자주 사용되는 컬럼) 예를 들어, 고객 ID와 같은 고유 값이 많은 컬럼은 인덱스 생성 시 우선 고려된다. 반면, 성별과 같이 고유 값이 적은 컬럼(낮은 카디널리티)은 인덱스의 효과가 제한적일 수 있다.
  • 카디널리티: 고유 값이 많은 컬럼( 높은 카디널리티)을 우선한다. (카디널리티는 컬럼 내 고유 값의 개수를 의미)
  • 업데이트 빈도: 자주 업데이트되는 컬럼에 인덱스를 걸면 인덱스 유지 관리에 추가적인 오버헤드가 발생하므로 신중하게 인덱스를 생성한다. 예를 들어, 실시간으로 변경되는 재고 수량 컬럼에 인덱스를 생성하면 인덱스의 유지 보수 비용이 높아질 수 있다.
  • 결합 컬럼: 여러 컬럼이 함께 자주 사용되면 복합 인덱스를 고려한다. 예를 들어, customer_id와 order_date가 함께 자주 조회된다면 이 두 컬럼을 포함하는 복합 인덱스를 생성하는 것이 효율적이다.
  • 쿼리 패턴 분석: 실제 운영 환경에서의 쿼리 로그를 분석하여 자주 사용되는 쿼리 패턴을 파악하고, 이에 맞추어 인덱스를 생성하는 것이 좋다.
  • 순서: 복합 인덱스의 경우, 인덱스 컬럼의 순서가 중요하다. 가장 먼저 필터링되는(즉, WHERE 절에서 가장 앞에 오는) 컬럼을 인덱스의 첫 번째 컬럼으로 설정하는 것이 일반적이다.

복합 인덱스 사용 시 주의 사항

복합 인덱스를 힌트로 사용할 때, WHERE 절에 인덱스의 컬럼들을 효율적으로 사용하는 것이 중요하다. 모든 컬럼을 반드시 포함할 필요는 없지만, 다음 사항을 고려해야 한다.

 

1. 인덱스의 선행 컬럼 사용

복합 인덱스의 첫 번째 컬럼은 반드시  WHERE 절에 포함되어야 한다. 그렇지 않으면 인덱스가 비효율적으로 사용될 수 있다. 예를 들어, 복합 인덱스가 CREATE INDEX idx_orders_customer_date ON orders (customer_id, order_date); 로 생성된 경우, 쿼리에서 customer_id를 사용해야 인덱스가 제대로 작동한다.

 

첫 번째 컬럼이 포함되지 않으면 데이터베이스는 인덱스를 활용하지 않고 전체 테이블을 스캔하게 되어 성능이 저하된다.

 

 

2. 나머지 컬럼 사용

첫 번째 컬럼 외의 나머지 컬럼들도 가능하면 포함하는 것이 좋다. 이를 통해 인덱스의 효과를 최대화할 수 있다.

 

반응형