본문 바로가기

Server Oriented/DB-Oracle

exists 조건을 넣을 때 unique index 를 태우지 않는다면..

아래와 같이 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