DB/Oracle

[Oracle] Where절에서 괄호 우선순위가 동작하지 않는 경우 (옵티마이저)

junnnhhh 2025. 10. 16. 20:42
728x90

이슈)

현업 요청으로 개발 중,,, 조건절에 아래와 같이 작성했다.

...
WHERE
TABLE.COLUMN_A = VALUE1 AND
(TABLE.COLUMN_B = VALUE2 AND TABLE.COLUMN_C = VALUE3)
...

 

내가 의도한건 괄호에 있는 조건을 먼저 검사를 하게끔 한 것인데, 실제 쿼리를 돌려보니

...
WHERE
TABLE.COLUMN_A = VALUE1 AND
TABLE.COLUMN_B = VALUE2 AND 
TABLE.COLUMN_C = VALUE3
...

이것과 똑같이 동작을 했다...

 

확인을 해보니

SQL에 WHERE절의 괄호는 논리적인 평가 순서만 바꿔주고, 옵티마이저가 조건을 실제로 어떻게 적용하는지까지는

보장해주질 않는다고 한다...

 

DBMS에서 AND/OR 조건을 최적화에서 인덱스 활용을 다르게 적용

 

따라서 이를 해결하기 위해서는

CASE문 또는 서브쿼리를 활용해서 조건 필터를 작성하면 된다!!

728x90