오라클 쿼리 성능을 떨어뜨리는 흔한 실수: WHERE절에서 함수 사용
오라클에서 쿼리 성능을 높이기 위해 인덱스를 적극적으로 활용하는 것이 중요합니다.
하지만 아무 생각 없이 작성한 WHERE절 하나가 인덱스를 무용지물로 만들어버릴 수 있습니다.
대표적인 실수가 바로 컬럼에 함수를 적용하여 인덱스를 타지 못하게 만드는 것입니다.
이 문제는 단순히 성능 저하로 끝나는 것이 아니라, 대용량 테이블에서는 실제 서비스 지연으로 이어질 수 있습니다.
잘못된 예시
SELECT * FROM EMP
WHERE TO_CHAR(HIREDATE, 'YYYY') = '1981';
위 쿼리는 HIREDATE
컬럼에 TO_CHAR
함수를 적용하고 있습니다.
이런 경우, 해당 컬럼에 인덱스가 걸려 있어도 인덱스를 사용할 수 없습니다.
결과적으로 오라클은 전체 테이블을 스캔(Full Table Scan) 하게 되고, 처리 시간이 급격히 늘어날 수 있습니다.
인덱스를 살리는 방법
함수는 리터럴 값(고정값)에 적용하고, 컬럼은 그대로 사용하는 것이 핵심입니다.
SELECT * FROM EMP
WHERE HIREDATE BETWEEN TO_DATE('1981-01-01', 'YYYY-MM-DD')
AND TO_DATE('1981-12-31', 'YYYY-MM-DD');
이 방식은 HIREDATE
컬럼에 함수가 적용되지 않기 때문에, 인덱스를 그대로 사용할 수 있습니다.
결과적으로 훨씬 빠른 조회 성능을 기대할 수 있죠.
실무에서 자주 발생하는 유사 사례
UPPER(컬럼)
또는LOWER(컬럼)
으로 검색할 때TRUNC(날짜컬럼)
으로 날짜 비교할 때- 숫자 계산이 들어간 컬럼 비교 예:
SALARY + BONUS > 5000
이런 경우 모두 인덱스를 못 타게 되어, 쿼리 성능이 나빠질 수 있습니다.
가능하면 계산이나 변환은 리터럴 값 쪽에 적용하도록 쿼리를 재작성하세요.
요약
- WHERE절에서 컬럼에 함수 적용 시 인덱스를 사용할 수 없음
- 성능을 위해 컬럼은 그대로 두고 리터럴에만 함수 사용
- 실무에서는 사소한 실수 하나가 전체 시스템에 영향을 줄 수 있음
- 습관처럼 인덱스를 고려한 WHERE절을 작성하는 것이 중요!
#오라클성능 #쿼리튜닝 #인덱스활용 #SQL성능최적화 #오라클쿼리 #개발팁
'오라클 실무 쿼리 튜닝' 카테고리의 다른 글
인라인 뷰 vs 테이블 조인 – 같은 결과, 다른 처리 방식 (0) | 2025.04.14 |
---|---|
INDEX RANGE SCAN과 FULL SCAN, 언제 어떤 게 빠를까? (0) | 2025.04.09 |
인덱스가 성능을 좌우한다? 속도 차이가 극명하게 나는 상황 3가지 (0) | 2025.04.08 |
오라클 인덱스 스캔 방식 정리 - FULL SCAN, RANGE SCAN, UNIQUE SCAN 차이점 (0) | 2025.04.08 |
성능이 확 달라집니다: 오라클 SQL 힌트 실무 적용 가이드 (0) | 2025.04.07 |