반응형
데이터베이스 성능 최적화를 위해 인덱스를 잘 활용하는 것은 매우 중요하다. 특히 복합 인덱스를 잘 활용하면 쿼리 성능을 크게 향상시킬 수 있다. 이번 글에서는 복합 인덱스를 효율적으로 사용하기 위한 기준에 대해 정리해본다.
복합 인덱스란?
복합 인덱스는 여러 컬럼을 하나의 인덱스로 묶은 것이. 예를 들어, 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. 나머지 컬럼 사용
첫 번째 컬럼 외의 나머지 컬럼들도 가능하면 포함하는 것이 좋다. 이를 통해 인덱스의 효과를 최대화할 수 있다.
반응형
'Database' 카테고리의 다른 글
데이터베이스의 복합 기본 키 (Composite Primary Key) (0) | 2024.08.01 |
---|---|
데이터베이스 테이블 파티셔닝 개념과 사용 예제 (0) | 2024.06.23 |
[Oracle] Partition By 절을 활용한 데이터 그룹화 및 분석 (0) | 2024.06.23 |
날짜 파티션 인덱스 최적화: TRUNC와 형변환을 피하는 방법 (0) | 2024.05.19 |
[Oracle] 조인(Join) 알고리즘 (0) | 2024.05.04 |