인덱스를 걸었는데도 쿼리가 느리게 실행된 적 있으신가요?
그 원인 중 하나는, WHERE절에서 컬럼에 함수를 적용했기 때문일 수 있습니다.
-- 인덱스를 무시하게 되는 방식
SELECT *
FROM orders
WHERE TO_CHAR(order_date, 'YYYY-MM') = '2025-04';
→ order_date에 인덱스가 있어도, 컬럼에 함수가 적용되면 인덱스를 타지 못하고 전체 테이블을 스캔하게 됩니다.
-- 성능을 고려한 범위 조건
SELECT *
FROM orders
WHERE order_date >= '2025-04-01'
AND order_date < '2025-05-01';
→ 이렇게 함수를 제거하고 범위로 조건을 작성하면, order_date 인덱스를 활용할 수 있어 성능이 개선됩니다.
✔️ WHERE절에서 컬럼에 함수를 사용하면 인덱스가 무력화됩니다.
✔️ 조건문 구조를 바꾸는 것만으로도 쿼리 성능이 크게 개선될 수 있습니다.