WHERE 절 조건의 순서가 성능에 영향을 줄까?
SQL 쿼리를 작성할 때 WHERE
절 안의 조건 순서를 신경 써야 할까요? 예를 들어 다음 두 쿼리는 조건 순서만 다를 뿐 동일한 결과를 반환합니다.
SELECT * FROM employees
WHERE salary > 5000 AND department_id = 10;
SELECT * FROM employees
WHERE department_id = 10 AND salary > 5000;
논리적으로는 동일하지만, 실행 성능은 달라질 수 있습니다. 그 이유는 바로 오라클 옵티마이저(Optimizer)가 실행 계획을 생성할 때 조건 순서를 고려하기 때문입니다.
옵티마이저는 어떻게 조건을 처리할까?
오라클 옵티마이저는 통계 정보, 인덱스 유무, 조건의 선택도 등을 종합적으로 판단해 실행 계획을 수립합니다. 이 과정에서 조건의 순서가 힌트를 줄 수는 있지만, 옵티마이저는 일반적으로 가장 효율적인 조건부터 우선 적용하려 합니다.
즉, 작성 순서보다는 조건의 필터링 효과(선택도)가 중요합니다. 예를 들어 department_id = 10 조건이 훨씬 더 많은 행을 걸러낼 수 있다면, 옵티마이저는 해당 조건을 먼저 적용하는 방향으로 실행 계획을 구성합니다.
실무에서는 어떤 기준으로 정리할까?
조건 순서는 성능에 직접적인 영향을 주지 않을 수 있음
→ 옵티마이저가 최적 조건을 자동으로 판단다만 인덱스를 활용하려면 조건 순서가 중요할 수 있음
→ 복합 인덱스의 컬럼 순서에 맞춰 WHERE 조건을 작성하는 것이 유리실행계획(EXPLAIN PLAN)으로 실제 적용된 조건 순서를 확인
→ 예상과 다른 경우 힌트나 인덱스 조정 필요
조건 순서가 항상 성능을 좌우하는 것은 아니지만, 인덱스 구조와 선택도에 맞춰 조건을 구성하면 더 효율적인 쿼리를 만들 수 있습니다.
#SQL #WHERE절 #조건순서 #실행계획 #성능최적화 #쿼리튜닝 #인덱스활용
'SQL 기초 정리' 카테고리의 다른 글
SELECT *를 쓰면 왜 안 좋을까? 실무에서 컬럼을 명시하는 이유 (0) | 2025.04.10 |
---|---|
NULL은 0이 아니다! SQL에서 NULL이 가진 의미와 주의점 (0) | 2025.04.10 |
INNER JOIN과 OUTER JOIN, 뭐가 다를까? 실무에서 꼭 알아야 할 차이점 (0) | 2025.04.10 |
GROUP BY와 ORDER BY의 차이는 뭘까? 비슷해 보이지만 전혀 다른 역할 (0) | 2025.04.09 |
DISTINCT는 정말 중복만 제거할까? 사용 시 주의해야 할 3가지 포인트 (0) | 2025.04.08 |