select
case when count(1) > 0 then 'y' else 'n' end as sb_yn
from ta, tb
where
~~~
메인 쿼리에 case when count() 을 사용하게 되면 전체 탐색을 하게 될 가능성이 있다.
count() 를 사용하면 전체를 읽어서 값을 가져온다.
즉 존재 여부는 한번만 호출이 되면 되기에 전체가 n 이라면 n-1만큼 낭비라는 소리가 된다.
그럼 이걸 어떻게 개선할수 있을까?
정답은 rownum을 활용하는것이다.
select
case when count(1) > 0 then 'y' else 'n' end as sb_yn
from ta, tb
where
~~~
and rownum <= 1
block 값을 보면 얼마나 개선이 되는지 알 수 있다
'Infra' 카테고리의 다른 글
| SQL 튜닝 not exists (0) | 2025.10.26 |
|---|---|
| L4 SNAT 세션 풀(Session Pool) (0) | 2025.10.26 |
| TCP 3-way Handshake (0) | 2025.10.19 |
| L4 SNAT란 (0) | 2025.10.12 |
| 간단한 SQL 튜닝 팁 2탄 (0) | 2025.10.09 |