본문 바로가기
데이터베이스

결합(복합) 인덱스 어떻게 구성할까?

by 데이널 2024. 5. 16.

인덱스를 사용하다 보면 단일 인덱스(Single Index)만 사용하지 않습니다. 복합 인덱스라고도 하는 결합 인덱스는 테이블의 여러 열을 포함하는 인덱스입니다.  즉 단일칼럼이 아닌 2개 이상의 칼럼으로 구성된 인덱스를 결합 인덱스라고 합니다.  사이트에 가보면 결합 인덱스(Concatenated Index)를 잘 못 구성하는 사례가 많은데요. 어떻게 구성해야 할까요?

 

 

결합 인덱스 구성 가이드

잘 알겠지만 모든 SQL 조건절마다 최적화된 인덱스들을 모두 생성할 수는 없습니다. 대체적으로 조건절에 자주 사용되는 칼럼들이 선정 대상이 됩니다. 

 

되도록이면 선정된 칼럼들 중 ‘=‘ 조건으로 자주 조회되는 칼럼을 앞쪽에 위치하는 것이 유리합니다. 정력(Sort) 작업이 생략되도록 칼럼 추가를 고려하는 것을 권장합니다. 인덱스 만으로 해결할 수 있는 경우는 인덱스에 칼럼 추가를 고려하시는 게 좋습니다. 

 

결합 인덱스 5가지 고려사항

결합 인덱스를 구성할 때 데이터베이스 관리의 효율성을 보장하기 위해 5가지를 고려해야 합니다. 결합 인덱스를 올바르게 구성하면 쿼리 성능이 크게 향상될 수 있지만, 잘못 사용하면 성능이 저하되고 불필요한 리소스가 소모될 수 있습니다.


1. 컬럼의 순서

결합된 인덱스의 칼럼의 구성 순서는 매우 중요합니다. 일반적으로 검색 결과의 범위를 가장 많이 좁히는 가장 선택적인 열이 먼저 배치되어야 합니다. 이는 검색 프로세스 초기에 스캔되는 row 수를 현저히 줄여 인덱스의 효율성을 극대화합니다. 앞에서 설명한 결합 인덱스 구성 가이드를 참고하시기 바랍니다. 


2. 쿼리 패턴 및 인덱스 전략

일반적으로 인덱스 전략을 위해 쿼리 패턴을 분석합니다. 이미 구성된 인덱스도 문제가 있는 경우가 많습니다. 보통 성능 최적화 프로젝트 진행 할 경우 인덱스 전략부터 수행하는 경우가 많습니다. 결합 인덱스는 여러 열을 기준으로 필터링하거나 정렬하는 쿼리에 특히 유용하기 때문이니다.

 

SQL이 액세스 하는 방식을 분석하면 가장 공통적인 쿼리 패턴을 포함하여 인덱스를 설계할 수 있습니다. 아래 인덱스 디자인 차트를 통해 작업을 하는데요. 쿼리 속도 향상을 위한 데이터베이스 인덱스 설계 전략을 참고하시기 바랍니다. 

 

인덱스 디자인 차트
인덱스 디자인 차트

 

3. 인덱스 크기

많은 사람들이 간과하는 것이 인덱스의 크기입니다. 성능만 생각하고 컬럼을 추가했다가 테이블보다 더 큰 몬스터(?) 인덱스가 생성되기도 합니다. 이런 인덱스는 공간 리소스뿐 아니라 관리 부하로 결국 성능도 좋지 않게 됩니다. 

 

특히 카디널리티가 높은 여러 열을 인덱싱하는 경우 결합된 인덱스는 커질 수 있습니다. 이는 방대한 스토리지를 소비할 수 있습니다. 향상된 쿼리 성능과 스토리지 오버헤드 간의 균형을 고려해야 합니다. 인덱스 크기는 Insert, update, delete 작업에도 영향을 미친다는 것을 아시죠? 이러한 작업을 많은 경우 Big 인덱스를 유지로 인한 작업 속도가 느려질 수 있습니다.

 

4. 중복성 및 모니터링

인덱스 전략을 통해 중복 인덱스 생성을 피해야 합니다. 예를 들어, 테이블에 이미 열 (A, B)에 대한 인덱스가 있는 경우 (A)에만 또 다른 인덱스를 만드는 것은 지양해야 합니다. 단, 여러 테스트를 통해 중복 인덱스가 상당한 성능상의 이점이 입증 된 경우는 생성하는 경우도 있습니다. 

결합 인덱스가 성능에 미치는 영향을 정기적으로 모니터링합니다. 시간이 지남에 따라 데이터 볼륨이 증가하고 쿼리 패턴이 변경됨에 따라 인덱스의 효율성이 저하될 수 있습니다. 데이터베이스 성능 모니터링 도구는 더 이상 유용하지 않거나 조정이 필요한 인덱스를 식별하는 데 도움이 될 수 있습니다.

 

5. 데이터베이스 종류

데이터베이스 종류에 따라 결합된 인덱스의 고유한 작동 방식으로 처리합니다. 최적의 인덱스 디자인을 위해서는 데이터베이스 시스템(예: MySQL, PostgreSQL, SQL Server)의 특징과 제한 사항을 이해하는 것이 필요합니다. 또한 과거 버전에는 안되던 기능이 최신 버전에서는 활용할 수 있게 개선되는 경우가 많습니다. 꼭 버전 별 업데이트도 확인해야 합니다. 

 

결합된 인덱스를 프로덕션 환경에 배포하기 전에 성능  테스트하는 것을 권장합니다. 여기에는 쿼리 성능뿐만 아니라 데이터 수정 작업에 대한 영향도 확인하셔야 합니다. 


마무리

위에서 설명한 5가지를 고려하여 결합 인덱스를 구성하면, 데이터베이스 성능을 크게 향상하는 동시에 저장소, 유지 관리 및 운영 복잡성의 균형을 맞춰 설계할 수 있습니다. 인덱스의 종류와 원리를 알고 싶다면 아래 글을 참고하시기 바랍니다. 

 

 

 

[SQLD] 데이터베이스 인덱스(Index) 왜 사용할까?

이번 포스팅에서는 데이터베이스 인덱스에 대해 알아보도록 하겠습니다. 인덱스 컬럼을 왜 만드는지 궁금하신 분들이라면 주목해 주세요. 보통 데이터베이스에서 많이 활용하는 인덱스는 B*Tree

bommbom.tistory.com