인덱스 설계 시 고려해야 할 기준과 성능 최적화를 위한 핵심 원칙을 정리한 내용입니다.
인덱스의 효율성은 데이터의 식별력에 달려 있습니다. 데이터의 중복도가 낮고 고유한 값(Unique)이 많을수록 인덱스의 효과가 좋습니다.
여러 컬럼으로 구성된 인덱스에서는 컬럼의 배치 순서가 성능에 결정적인 영향을 미칩니다. 다음 우선순위를 따르는 것이 좋습니다.
WHERE 절에서 동등 비교(=)로 사용되는 컬럼WHERE 절에서 범위 조건(>, <, LIKE, BETWEEN)으로 사용되는 컬럼=)일 경우, 카디널리티가 높은(고유한 값이 많은) 컬럼을 선행예시:
WHERE 부서='개발팀' AND 입사일 >= '20240101'
- 권장:
(부서, 입사일)- 특정 부서를 먼저 필터링한 후 날짜 범위를 검색하므로 효율적임.- 비권장:
(입사일, 부서)- 날짜 범위로 데이터를 먼저 검색한 후 부서를 필터링하므로 비효율적임.
조인 수행 시 각 테이블의 역할(Driving/Driven)에 따라 인덱스 전략을 다르게 수립해야 합니다.
WHERE 절 컬럼에 인덱스를 적용하여 스캔 범위를 최소화하는 것이 중요합니다.조인 컬럼 + WHERE 컬럼 순으로 복합 인덱스를 구성하면 효율이 극대화됩니다.쿼리 성능 개선이 필요한 경우, SELECT 절에 포함된 컬럼까지 인덱스에 포함시키는 방법을 고려할 수 있습니다.
인덱스는 조회(SELECT) 성능을 향상시키지만, 데이터 변경(INSERT, UPDATE, DELETE) 시에는 성능 부하를 유발합니다.
다음과 같은 쿼리 패턴은 인덱스를 정상적으로 활용하지 못하므로 주의가 필요합니다.
WHERE UPPER(이름) = 'KIM'과 같이 컬럼을 함수로 감싸거나 연산하면 인덱스를 사용할 수 없습니다. (WHERE 이름 = 'Kim'으로 변경 필요)!=, <> 등의 부정형 조건은 인덱스 효율이 떨어져 풀 스캔을 유발할 수 있습니다.%단어 형태의 검색은 인덱스를 타지 않습니다. (단어% 형태만 가능)인덱스 설계 및 검토 시 다음 사항을 점검하십시오.
WHERE 절의 동등 비교(=) 조건이 인덱스의 선두에 위치하는가? (순서)