1. AND pk1 LIKE 인자값 || '%'
- 인자값이 있건 없건간에 하나의 실행계획으로 고정됨
- 전체조회시(인자값이 없을 경우) pk1 이 널허용인 경우 널값이 누락됨
- pk1이 가변자리수인 경우 인자값이 'a' 일 경우 'ab' 등이 출력될 수 있음.
2. AND (인자값 IS NULL OR (인자값 IS NOT NULL AND pk1 = 인자값))
- 인자값이 있고 없고에 따라 실행계획이 두개로 분리될 가능성이 있음
3. AND pk1 = DECODE(인자값, NULL, pk1, 인자값)
- 인자값이 있고 없고에 따라 실행계획이 두개로 분리될 가능성이 있음
- 전체조회시(인자값이 없을 경우) pk1 이 널허용인 경우 널값이 누락됨
4. SELECT ~
AND 인자값 IS NULL
UNION ALL
SELECT ~
AND 인자값 IS NOT NULL
AND pk1 = 인자값
- 실행계획이 확실하게 분리됨
확실한 것은 실행계획을 반드시 확인해 봐야만 합니다.