blog
[ORACLE] NVL vs IS NULL 본문
결론부터 말하자면 "둘 다 해보고 더 빠른 것을 선택"해야한다.
MEMBER 테이블에 존재하지 않는 파라미터(List)의 AUTH_CD 수를 반환하려한다. → OUTER JOIN 후 null count
1번 쿼리 - nvl2를 이용
2번쿼리 - WHERE절에서 IS NULL을 이용
# Mybatis, size 40인 list로 foreach문을 돈다.
1번
<select id="CodeCHK" parameterType="java.util.List" resultType="int">
SELECT
COUNT(
NVL2(B.AUTH_CD, NULL, 'CHK')
) AS AUTH_CD
from
(
< foreach collection = "list" item = "item" open = "" separator = "union" close = "" >
SELECT
#{item.AUTH_CD} AS AUTH_CD
FROM DUAL
</ foreach >
) A
LEFT OUTER JOIN MEMBER B ON A.AUTH_CD = B.AUTH_CD
</select>
2번
<select id="CodeChk" parameterType="java.util.List" resultType="int">
SELECT COUNT(A.AUTH_CD) AS AUTH_CD from (
<foreach collection="list" item="item" open="" separator="union" close="">
SELECT
#{item.AUTH_CD} AS AUTH_CD
FROM DUAL
</foreach>
) A
LEFT OUTER JOIN MEMBER B ON A.AUTH_CD = B.AUTH_CD
WHERE A.AUTH_CD IS NULL
</select>
위에서부터 1번, 2번 쿼리
실행 계획을 보면
차이가 난다.
https://dba.stackexchange.com/questions/147421/nvl-v-s-check-is-null
NVL v/s Check IS NULL
We have queries in procedures in oracle like, SELECT ...... WHERE ..... AND (SomeColumn IS NULL OR SomeColumn = SomeThing) But our DBA is saying this is not good, and saying use NVL
dba.stackexchange.com
Try both and see which one works best for your specific query.
이게 가장 맞는 말인 것 같다ㅎㅎ
'Web > SQL' 카테고리의 다른 글
[MYSQL] DATE_FORMAT (4) | 2024.09.18 |
---|---|
[MySQL] SUBSTRING (0) | 2024.09.18 |
[MySQL] REPLACE 데이터 치환 (0) | 2022.10.19 |
[MySQL] DB에 Column 데이터 추가하기 (0) | 2022.09.14 |
SQLD 시험 응시 방법 및 후기 (0) | 2022.09.14 |