아래와 같이 exists 조건을 넣을 때 unique index 가 없거나 태우지 않는다면..
rownum = 1 조건을 추가하자..
플랜을 떠 보면, 좀더 범위가 줄거나 체크할 내용이 가벼워진 것을 확인할 수 있을 것이다..
rownum = 1 이라는 조건이 들어가면 pk 를 태우는 것과 동등하게 작동한다고 볼 수 있다.
그렇더라도 인덱스가 타는 구조로 가는 것이 좋다.
단, 이것이 만능이 아닐 수 있다.
초기값 얼만큼의 갯수를 가져오느냐, 모든 결과를 추출하느냐와도 상관관계가 있을 수 있다.
요는, 플랜을 뜨긴 하되 실제로 필요한 결과를 제대로 짧은 시간에 가져오느냐는 발품을 팔아야 한다는 것. ㅠ.
DB Tool 로는 A 라는 sql 문장이 퍼포먼스가 좋게 나오더라도,
실행될 때는 B 가 더 빠를 수도 있다.
그리고, 데이타가 어떻게 또는 어떤 성향의 데이타가 쌓이느냐에 따라서도 달라질 수 있다.
인덱스를 더 추가해야 할 지, 또 다른 쿼리를 만들어 볼 지를 연구해 볼만 하다.
select *
from tableA a
where a.조건들..
and exists
(select 1
from tableB b
where b.조건 = a.조건
and rownum = 1
)
'Server Oriented > DB-Oracle' 카테고리의 다른 글
SQL 쿼리 튜닝 (0) | 2017.08.17 |
---|---|
cascade constraint purge (0) | 2017.07.17 |
DB 작업시 날아간 데이타 복원 (1) | 2017.03.19 |
하둡 Hadoop (0) | 2017.01.31 |
몽고디비, mongo DB (0) | 2017.01.31 |