INDEX SKIP SCAN으로 SKIP한 컬럼을 조회할 경우? 0 0 2,502

by 요루 [Oracle Tuning] skip index skip scan leading column 생략 [2010.02.01 12:07:32]



안녕하세요
오랫만에 오라클 클럽을 다시 찾게되었습니다.

질문은 제목과 같은데요

Oracle 9.2.0.8 버전의 테이블 T에 컬럼 A,B,C,D,E 가 있구요.

Primary Index는 B,C,A 순으로 잡혀있고 ( Index 1 )
Non Unique Index로 D,A,B,C 순서로 잡혀있습니다. ( Index 2 )

조회 조건은 A만 들어오고 있고, 조회하려하는 컬럼은 D입니다.
index 2를 이용할경우 table access 없이 인덱스 조회만으로 가능하겠지요.


그런데 힌트를 INDEX SKIP SCAN으로 Index 2를 타게 했더니 (trace결과 Skip Scan 확인)
분명 데이터가 있는데 조회 결과는 없다고 없더라구요.!!!!???
INDEX_FFS 를 힌트로 주면 데이터가 나오구요.


추측해보건데

1. Leading Column (컬럼 A)을 Skip 했다.
2. Select 절에서 보여주려 하는 컬럼(A)이 인덱스 상에 존재한다.( Index 2 )
3. 옵티마이저가 테이블 엑세스를 하지 않고 인덱스상의 컬럼 A를 이용하여 보여주려하지만,
   익덱스 스캔시 A를 skip 하고 read 했으므로 데이터가 나오지 않는다.

라는 결론이 조심스럽게 내려봤습니다.

오라클 버그 일까요..?

다른 다양한 가능성을 위해서, 쿼리문과 실행계획을 올려드려야 하는것이
지당하오나 사정상 보여드릴수가없어 이렇게 주저리주저리 말로 떠듭니다.



다시 결론 지어서 요약하면
Skip Scan으로 Skip한 컬럼을 Select 해서 보여주려할 때 결과가 나오느냐 하는것입니다.
물론 Skip한 컬럼은 Index 에 존재해서 테이블 스캔을 안할거라고 가정합니다.

정상적이라면 Index 를 읽은 내용중에 해당 컬럼이 skip된것을 보고
테이블 엑세스를 해야하지만, 그렇지 않은것 같아서 이렇게 질문드립니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입