문자열 대소 비교시 속도차이 0 7 3,407

by 오라초보 문자열 크다작다 비교속도 [2009.02.06 12:43:32]


안녕하세요.우선 oracle 9i 사용합니다.


문자열 대소비교 우선순위에 따라 속도차이 심하게 납니다.

1)   select    *  
          from   XXX
       where   DATE_1  <=    ’20090206’
           and  DATE_1   >=    ’20090206’
----------------------
     0.047초

2)    select    *  
           from   XXX
        where   DATE_1   >=     ’20090206’
            and  DATE_1    <=     ’20090206’
----------------------
    79.812초

(PK 아니고 DATE_1컬럼의 인덱스는 물론 걸려 있습니다.)

위의 1과 2의 차이가 심하게 나는 되요.... 혹시 아시는 분 계시나요.....

by 마농 [2009.02.06 13:18:16]
위의 예시만으로는 이해가 안가네요.
실제 적용쿼리와 각각의 실행계획을 보여주세요.
date_1 컬럼의 정보도 알려주세요.

by 호야 [2009.02.06 13:23:34]
저 조건 만으로는 실행 계획 은 상항 RANGESCAN 일껀데요
상위 조건만 말고 다른 조건이 혹시 들아 가나요?
그리고 저 인덱스말고 다른 인덱스가 있다면, 문제가 될수도 있구요
한쪽은 RANGE 고 한족은 FULL 같은데..-_-;

by 현 [2009.02.06 13:47:38]
혹시 예제 문장이 잘못되었던지,
질문을 잘못 왜곡하신건 아닐런지 의심이 됩니다.
위의 예시를 보면 결과는 동일해야 하며, 인덱스 컬럼이 있다면 동일하게 탔겠죠.
정확한건 트레이스를 떠봐야 알겠지만 좀 이상하긴 하네요...

by 오라초보 [2009.02.06 15:40:07]
글쓴입니다. 헐 심려끼쳐드려 죄송^^...

date_1 컬럼은 varchar2(6) 이구요 실행계획을 봐도 서로 동일합니다.
이상한 문제일지 모르지만 분명 같은 쿼리를 돌려도
어떤거는 빨리 나오고
또 어떤거는 스페이스 하나 차이로 엄청 느리게 나오고 그럽니다.
같은 세션인데 말이죠.. 지금 완전 쇼크상태 ㅡ.ㅡ;;

원본 쿼리는 이겁니다. (약간수정)
select datanum
from APP_XX
where DATE_1 <= '20090906'
and DATE_1 >='20090206'
and DATANUM = '20090206xyxyxyxyxyx'

datanum은 pk 이구요 varchar2(30) 입니다. 해결하게 되면 바로 올리도록 하겠습니다. 감사합니다.

by 마농 [2009.02.06 16:02:39]
varchar2(6) 맞나요? 8자리랑 비교하네요.
뭔가 숨기는게 더 있는듯....
아주 사소한 문제로도 실행계획에 차이가 발샐할 수 있습니다.
바인드 변수 사용 유무라든가, 공유영역에 먼저 파싱되어 실행되었던 쿼리가 존재하는지? 메모리에 해당 데이터가 미리 올라와 있는지 등등..변수가 많습니다.
숨겨지고 외곡된 정보의 질문으로는 답찾기가 힘들어요.

by 현 [2009.02.06 17:20:49]
실행계획이 아니라 트레이스를 원한건데요..?
DATANUM 이 pk라면 pk 유니크 인덱스를 탈텐데요..
위에 올리신 쿼리랑 답글에 올리신 쿼리가 달라졌네요?
실행계획에서는 pk유니크 인덱스 제대로 타나요?
아무래도 먼가 더 숨기는게 있는듯 합니다...

by 웅 [2009.02.06 17:33:16]
마치 형사님들 같으세요..ㅋㅋ
미묘한 문제일 수록 확인을 꼼꼼히 해야하니까요. ^^

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