쿼리 플랜차이가 있을까요? 0 5 2,417

by 대궁이 [2009.10.22 16:46:58]


1.

SELECT DECODE(A.CNT+B.CNT,0,'Y','N') DEL_YN
  FROM (
        SELECT COUNT(*) CNT
          FROM DBD007M
         WHERE TXPR_BMEN_NO = '4028154166'
           AND PART_NO = '1'
       ) A ,
       (
        SELECT COUNT(*) CNT
          FROM DBD008M
         WHERE TXPR_BMEN_NO = '4028154166'
           AND PART_NO = '1'
       ) B 
2.

SELECT DECODE(COUNT(*),0,'Y','N') DEL_YN
  FROM (
        SELECT TXPR_BMEN_NO , PART_NO 
          FROM DBD007M
        UNION   
        SELECT TXPR_BMEN_NO , PART_NO
          FROM DBD008M
       ) 
 WHERE TXPR_BMEN_NO = '4028154166'
   AND PART_NO = '1'

-------------------------------------------------------

DATA가 많을 경우는 어떤 경우가 더 속도면에서 좋을까요?

TXPR_BMEN_NO , PART_NO 2개의 컬럼은 전부 INDEX를 탑니다

 

 

 

 

by 서성우 [2009.10.22 16:59:20]
첫번째가 더 속도가 빠를것 같습니다.

by 호야 [2009.10.22 16:59:23]
옵티마이저가 똑똑한 넘이라면 SQL을 remake 를 하겠죠..ㅎㅎ
그냥 본다면 1번에 1표 던집니다.ㅎㅎ

그리고.. 모험..ㅋㅋㅋ

-------------------------------------------------------

SELECT DECODE(COUNT(*),1,'Y','N')
FROM dual
WHERE EXISTS(SELECT 1
FROM DBD007M
WHERE TXPR_BMEN_NO = '4028154166'
AND PART_NO = '1' )
OR EXISTS(SELECT 1
FROM DBD008M
WHERE TXPR_BMEN_NO = '4028154166'
AND PART_NO = '1')

by TeLl2 [2009.10.22 17:00:35]
SELECT NVL(MAX('N'), 'Y')
FROM DUAL
WHERE EXISTS (SELECT 'X'
FROM DBD007M
WHERE TXPR_BMEN_NO = '4028154166'
AND PART_NO = '1'
UNION ALL
SELECT 'X'
FROM DBD008M
WHERE TXPR_BMEN_NO = '4028154166'
AND PART_NO = '1');

by 손님 [2009.10.23 17:27:28]
근데 이게 결과가 같나요 첫번째꺼는 조인으로 집합의곱이고 두번째는 union all 집합의 합인데 결과가 다르지 않나요?

by 대궁이 [2009.10.27 18:06:18]
감사합니다
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입