인덱스가 성능을 좌우한다? 속도 차이가 극명하게 나는 상황 3가지
인덱스가 성능을 좌우한다? 속도 차이가 극명하게 나는 상황 3가지
SQL 성능 튜닝에서 인덱스(Index)는 빼놓을 수 없는 핵심 요소입니다. 하지만 단순히 인덱스를 만든다고 해서 항상 쿼리 속도가 빨라지는 것은 아닙니다. 인덱스가 실제로 효과를 발휘하는 조건과, 오히려 비효율을 유발하는 상황까지 모두 고려해야 실무에서 제대로 활용할 수 있습니다.
이번 글에서는 인덱스 유무에 따라 성능 차이가 극명하게 나는 3가지 상황을 실무 관점에서 정리해봅니다.
1. WHERE 절에서 다중 조건 필터링 시
SELECT * FROM EMPLOYEES
WHERE DEPARTMENT_ID = 10 AND JOB_ID = 'IT_PROG';
만약 DEPARTMENT_ID
, JOB_ID
각각 단독 인덱스만 존재하고, 두 컬럼을 동시에 포함한 복합 인덱스가 없다면 옵티마이저는 인덱스를 비효율적으로 사용할 수 있습니다. 반면 (DEPARTMENT_ID, JOB_ID)
로 구성된 복합 인덱스를 만들면 효율적인 Index Range Scan이 가능해집니다.
📌 실무 팁: 자주 함께 사용하는 조건은 복합 인덱스로 묶어주는 것이 훨씬 유리합니다.
2. 정렬(ORDER BY) + 페이징 처리 시
SELECT * FROM EMPLOYEES
ORDER BY HIRE_DATE
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;
HIRE_DATE
컬럼에 인덱스가 없으면 정렬 작업은 전 테이블을 스캔하면서 정렬 메모리를 소모하게 됩니다. 반면 인덱스가 있으면 인덱스 자체가 이미 정렬된 구조이므로 빠르게 필요한 범위만 추출할 수 있습니다.
📌 실무 팁: 페이징 쿼리에서는 정렬 기준 컬럼에 반드시 인덱스가 있어야 성능 이점을 누릴 수 있습니다.
3. 서브쿼리에서 EXISTS 조건 사용 시
SELECT * FROM DEPARTMENTS D
WHERE EXISTS (
SELECT 1 FROM EMPLOYEES E
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
);
EMPLOYEES.DEPARTMENT_ID
에 인덱스가 없다면 EXISTS
서브쿼리마다 테이블을 반복 스캔하게 되어 성능 저하가 큽니다. 반면 해당 컬럼에 인덱스가 있다면 각 부서별 매칭을 빠르게 찾을 수 있어 성능이 크게 개선됩니다.
📌 실무 팁: EXISTS
또는 IN
서브쿼리에서 조인 키에 인덱스가 없으면 심각한 성능 저하가 발생할 수 있습니다.
마무리하며
인덱스는 단순히 만들어두는 것이 아니라, 쿼리 실행 계획을 고려한 설계가 중요합니다. 특히 자주 사용되는 조합, 정렬 조건, 서브쿼리의 조인 키 등을 파악해 전략적으로 인덱스를 설계하는 것이 실무 튜닝의 핵심입니다.
항상 실행 계획(EXPLAIN PLAN)을 확인하고, 인덱스가 실제로 사용되는지 검증하는 습관을 들이세요.
#오라클 #SQL #쿼리튜닝 #인덱스 #성능개선 #실무팁 #데이터베이스
'오라클 실무 쿼리 튜닝' 카테고리의 다른 글
인라인 뷰 vs 테이블 조인 – 같은 결과, 다른 처리 방식 (0) | 2025.04.14 |
---|---|
INDEX RANGE SCAN과 FULL SCAN, 언제 어떤 게 빠를까? (0) | 2025.04.09 |
오라클 쿼리 성능을 떨어뜨리는 흔한 실수: WHERE절에서 함수 사용 (0) | 2025.04.08 |
오라클 인덱스 스캔 방식 정리 - FULL SCAN, RANGE SCAN, UNIQUE SCAN 차이점 (0) | 2025.04.08 |
성능이 확 달라집니다: 오라클 SQL 힌트 실무 적용 가이드 (0) | 2025.04.07 |