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
'DB > Oracle' 카테고리의 다른 글
| [Oracle] WITH절이란? (기본 사용법부터 재귀적 WITH절까지) (0) | 2025.10.16 |
|---|---|
| [Oracle] EXISTS 란? (0) | 2025.10.16 |
| [Oracle] NVL, DECODE, COALESCE (0) | 2025.10.16 |
| [Oracle] 옵티마이저 힌트 LEADING 과 INDEX_SS (0) | 2025.10.16 |
| [Oracle] INSERT 내부에 SELECT절 (0) | 2025.10.16 |