[답변]SELECT문장 문의 0 2 2,342

by 성시현 [2007.11.07 11:45:13]


일단 제가 다른 사이트에 올렸던 테스트 결과를 여기도 그대로 올리겠습니다.

 

10gR2에서 현재 저희 실무 쿼리일부와 실행계획을 올립니다...제가 다른 버전은 테스트를 못 하는 환경이라서리...^^;

아래에서 order by desc로 쿼리를 만들었는데 실행계획엔 INDEX RANGE SCAN DESCENDING과 STOPKEY가 나오는 것을 눈여겨 보시면 됩니다.


-- 쿼리일부...
SELECT
   cmpgn_nm
    , (
    SELECT MIN(cmpgn_qstn_num)
    FROM
     (SELECT cmpgn_num, cmpgn_qstn_num
         FROM zcam_qstn_brief
   ORDER BY cmpgn_num, cmpgn_qstn_num DESC
     ) zqb
       WHERE zqb.cmpgn_num = zcb.cmpgn_num
      AND ROWNUM <= 10
      ) AS cmpgn_qstn_num  -- max 10개 중 min값을 퀵하게 search
FROM zcam_cmpgn_brief zcb
WHERE cmpgn_num = 'BBA20071029008'

-- 실행계획
Operation Object Name Rows Bytes Cost Object Node In/Out PStart PStop
SELECT STATEMENT Optimizer Mode=FIRST_ROWS  1     1
  SORT AGGREGATE  1   19
    COUNT STOPKEY
      VIEW  1   19   1
        INDEX RANGE SCAN DESCENDING ZCAM.ZCAM_QSTN_BRIEF_N1 1   32   1
  INDEX UNIQUE SCAN ZCAM.ZCAM_CMPGN_BRIEF_PK 1   15   1

index_desc 힌트를 쓴 계획과 view만 빼고 거의 똑같죠?

또한 제가 위에서 더 좋은 경우라고 말한 것은 다음과 같습니다.

인덱스힌트의 가장 큰 단점은 누군가 고의로 또는 실수로 인덱스 컬럼순서를 변경하면 순서를 보장받지 못한다는 것이지요.
그래서 일반적으로는 인덱스힌트로 페이징을 유도하지만 위 내용이 가능한 환경이라면 인덱스힌트 방법은 정확한 값을 보장받지 못할 확률이 0.0001%라도 있기 때문에 튜닝 시 그다지 권장하지 않습니다...참고하세요...^^;

건승하시길...수고하세요~~

by 마농 [2007.11.07 00:00:00]
1. 8.0.6
- 에러 : 서브쿼리에서 정렬 사용 불가
2. 8.1.7
- index full scan descending + stopkey 는 되는데
- index range scan descending + stopkey 는 안되고 sort order by stopkey 로 됨
3. 9.2.0
- index range scan descending + stopkey 됨

by finecomp [2007.11.07 00:00:00]
핫...역시 마농님...^^;

진심으로 감사드리며 개인적으로 저도 궁금한 점이었는데 마농님덕에 풀린 것 같네요...후련합니다...^^;
대충 9i의 옵티마이저 부터 지원되는 것 같군요.

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