A와 B라는 테이블이 있고요.
각각 대략 5천건의 데이터가 조회된다고 가정합니다.
SELCT
CASE WHEN (SELECT COUNT(*) FROM B WHERE A.dp_nm = B.dp_nm AND B.dp_date = '2022-06-21') > 0 THEN 'OK'
ELSE 'NO' + (SELECT MAX(dp_time) FROM B WHERE dp_nm = A.dp_nm AND B.dp_date = A.dp_date)
FROM
A
쿼리가 정확하진 않지만 이런 식으로 SELECT절 내 CASE문에서 많은 데이터들을 체크하다보니 속도가 차이가 좀 많이 나는거 같은데(저 CASE컬럼이 있을 경우 10초, 없을 경우 1초가 나옴) 혹시 어떤식으로 튜닝하시는지 조언 구해봅니다.
Comment 1
-
지영아빠
2022.06.22 09:09
-- 정확할진 모르겠네요.
select
a.dp_nm,
a.dp_date,
case when isnull(B.cnt, 0) > 0 then 'OK'
else
'NO' + B.max_dp_time
end as yn
from A
left outer join (
select dp_nm, dp_date, sum(case when dp_date = '2022-06-21' then 1 else 0 end) as cnt, max(dp_time) as max_dp_time from b
where group by dp_nm , dp_date
) B
on a.dp_nm = b.dp_nm
and a.dp_date, b.db_date