태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

내꿈은 우주정복

블로그 이미지
네가 누구든, 얼마나 외롭든.
하늘가득별이총총

Article Category

분류 전체보기 (615)
It's Me (225)
My View Finder (186)
Your View Finder (3)
playground (7)
Working (36)
with coffee (1)
Scrap Book (28)
Think about (20)
일본어공부 (0)

Recent Comment

Recent Trackback

Calendar

«   2008/04   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      

Archive

  • Total36,735
  • Today117
  • Yesterday127
  1. 2008/04/03
    [스크랩] Exists
  2. 2008/04/03
    [s] 23
  3. 2008/04/03
    [s] 꼬맹이의 나들이. (2)
http://blog.naver.com/ebank13?Redirect=Log&logNo=40018384685



3.Exists
SQL문에서 Exists를 사용하는 것은 어떤 조건을 만족하는 집합의 존재 여부를 확인할 경우에 사용합니다. Exits는 주어진 조건을 만족하는 첫 번째 열을 만나면 트랜잭션을 멈추게 됩니다. 즉, 조건을 만족하면 처리를 멈추고 다음의 처리를 수행합니다. 그러나 Exists를 사용하지 않은 경우는 일반적으로 만족하는 조건을 모두 Search한 이후에 다음 처리를 수행함으로서 Access하는 횟수가 많아지게 됩니다.

<왼쪽><오른쪽>(Exist를 쓰는 게 훨 빠르다는 그림)

왼쪽의 SQL문은 EXISTS를 사용하지 않고 전체 COUNT를 구하여 COUNT가 0보다 큰 경우에 IF 조건문을 수행하는 프로그램입니다. 전체 COUNT를 구하기 위해서 해당되는 인덱스를 ACCESS한 후 테이블도 ACCESS했습니다. 그와 반면에 EXISTS를 사용하는 오른쪽 SQL문은 인덱스를 ACCESS한 후 테이블 ACCESS시에 한 건이 해당 될 경우에 인덱스 및 테이블 ACCESS를 멈추고 IF 조건문을 수행하고 있습니다.

즉 EXISTS를 사용하는 오른쪽 SQL문은 인덱스와 테이블을 조건문에서 해당되는 범위의 일부만 ACCESS하는 반면에 EXISTS를 사용하지 않는 왼쪽 SQL은 조건문에서 해당되는 범위 전체를 ACCESS하는 큰 차이점이 있습니다. 인덱스나 테이블의 ACCESS하는 횟수가 많으면 많을 수록 EXISTS를 사용하는 않는 왼쪽의 PROGRAM과 EXISTS를 사용하는 오른쪽의 프로그램의 수행속도는 크게 차이가 납니다. 당연히, 오른쪽이 빠르겠지요?

다음의 프로그램을 보시면 굳이 전체 건수를 알지 않아도 되는 것을 전체 건수를 알고 프로세스를 진행시키고 있습니다. 문제점 및 해결책에 대해서 학습하시도록 하겠습니다.

예)
SELECT COUNT(*) INTO :CNT
FROM DPCRII A
WHERE DP_ACNO = '123456'
AND SEQ > 100
.........
IF CNT > 0 ...
........

위의 프로그램은 SQL문에서 건수(CNT)를 구하고 아래 IF조건절에서 건수(CNT)가 0 이상이면 문장을 수행하고 등등을 수행하는 것입니다.
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 SORT (AGGREGATE)
2 1 INDEX (RANGE SCAN) OF 'DPCRII_PK' (UNIQUE)

위 실행계획은 INDEX DPCRII_PK를 먼저 ACCESS한 후 해당되는 로우들을 모두 ACCESS한 이후에 건수를 구하기 위하여 SORT(AGGREGATE)를 했습니다. 위 프로그램에서는 CNT를 구하여 그 값이 1이상이면 동일한 프로세스를 수행하고 있습니다. 그러면 여기서 CNT의 값이 1이상이면 SQL의 트랜잭션을 멈추고 다른 문장을 수행해도 문제는 없습니다. 따라서 이런 경우에 Exists문을 사용하여 SQL문에서 최소한의 수행시간이 걸리도록 SQL문을 수정하였습니다.

예) --> 이렇게 수정
SELECT 1 INTO :CNT FROM DUAL
WHERE EXISTS
( SELECT 'X'
FROM DPCRII A
WHERE DP_ACNO = '12345'
AND SEQ > 100 )
.........
IF CNT > 0 ...
........

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 FILTER
2 1 TABLE ACCESS (FULL) OF 'DUAL'
3 1 INDEX (RANGE SCAN) OF 'DPCRII_PK' (UNIQUE)

'Working > DataBase' 카테고리의 다른 글

[스크랩] Exists  (0) 2008/04/03
[DB2] SQL0100 - SQL0199  (0) 2007/11/14
[DB2] SQL0200 - SQL0299  (0) 2007/11/14
[DB2] SQL0300 - SQL0399  (0) 2007/11/14
[DB2] SQL0400 - SQL0499  (0) 2007/11/14
[DB2] SQL0500 - SQL0599  (0) 2007/11/14
Trackback 0 and Comment 0

뭘하다 이시간이 됐을까.
12시부터 자려고 했었는데, 새벽 4시가 다 되도록 잠을 이루지 못하고 있다.

요새 내 관심사? 즐거움?
그냥, 사진을 잘 찍고싶다와. 잘 살고 싶다.

즐거움..?
아직 없다.


'It's Me > [s] 26' 카테고리의 다른 글

[s] 25  (4) 2008/04/14
[s]24  (1) 2008/04/07
[s] 23  (0) 2008/04/03
[s] 연애이야기.  (4) 2008/03/31
[s] 22  (1) 2008/03/31
[s] 달콤한 목소리의 그.  (0) 2008/03/30
Trackback 0 and Comment 0

사용자 삽입 이미지


+

빛이 참 좋았던 그날.
따뜻한 빛과 어울리지도 않게 바람이 매섭던 그날. 간만의 출사.

독립기념관으로 향하는 천안역앞, 버스 정류장에서 할머니의 손을 꼬옥 붙잡고 있던 꼬맹이.
그 꼬맹이에게 비춰주던 햇살.

너무 예뻐서, 한컷 담아보고싶었다.
바람은 참 많이 불었지만, 오랜만에 보송보송한 햇빛이 참좋았던 그날.

이꼬맹이에게, 항상 이런 따뜻한 햇살이 비춰지길!

+

< Nikon FM / Carl Zeiss Planar T*  50.4 /  Fuij AutoAuto ASA200  / 100thRool / 천안역 >

* 오공이를 가방에 넣어두어, 어쩔수 없이 50mm렌즈로 찍을수 밖에 없어서 아쉬웠던.
이올린에 북마크하기(0) 이올린에 추천하기(0)

'My View Finder > One and Only' 카테고리의 다른 글

[s] 그녀, J  (10) 2008/04/06
[s] 지름신고 #2  (6) 2008/04/05
[s] 꼬맹이의 나들이.  (2) 2008/04/03
[s] 피사체와 나와의 거리2  (6) 2008/04/01
[s] 피사체와 나와의 거리.  (10) 2008/03/30
[s] 지름신고- LX2  (12) 2008/03/29
Trackback 0 and Comment 2
  1. BlogIcon pLusOne 2008/04/04 15:29 address edit & delete reply

    독립기념관...가깝지만 멀게만 느껴지는 곳...이번에도 순대&국밥 드시고 오셨나요...ㅎㅎ

    • BlogIcon 하늘가득별이 2008/04/05 01:09 address edit & delete

      ㅎㅎ 그때 3월 1일에 갔을때 찍은 사진이에요^^
      이때 순대국을 먹고 왔지요~