index 되어있으나 full scan 하는 이유 0 5 7,607

by 당근 [Oracle 기초] index oracle [2016.06.30 16:23:25]


안녕하세요. 오라클 작업 중, 궁금한 점이 있어 질문 드립니다.

아래와 같이 테이블과 index 가 있는 상태에서 비교값이 달라짐에따라 index 가 안먹히는 경우가 발생하는데

이유를 아시는분 도움 부탁 드립니다.

 

select f9.glabr3
, f9.*
from f0911 f9
where 1=1
and f9.glabr3 = '20'

explain plan 결과 값 - index range scan. cost - 5

select f9.glabr3
, f9.*
from f0911 f9
where 1=1
and f9.glabr3 = '100000000001'

explain plan 결과 값 - index range scan 없음. cost - 637375

 

 

by jkson [2016.06.30 16:36:35]

데이터 분포도에 따라 fullscan이 유리하면 fullscan 합니다.

f9.glabr3 = '100000000001' 에 해당하는 데이터가 엄청 많을 것 같네요.

f9.glabr3 = '20' 에 해당하는 데이터는 전체 데이터 건수 대비 양이 적으니 index를 사용하구요.

 


by 당근 [2016.06.30 16:41:37]

도움 감사합니다~

어떤 이유에서 full scan 이 더 유리하다고 판단한 모양이네요,,

일단 데이터는 둘 다 1건씩 있습니다


by 겸댕2후니 [2016.06.30 17:26:17]

둘다 1건씩인데, 실행계획이 분기되는 걸 보니

통계정보가 현재와 많이 다른가 보네요.


by 백호 [2016.07.01 15:35:28]

explain plan 은 어디까지나 실행계획인 거구요..   이렇게 돌꺼다 라는 것이구요

실제로는 실행한 결과를 dump 떠서 tkporf 툴로 분석한 실행계획이 실제로 돌은 계획입니다.

실제 실행된 계획을 한번 봐보시고, index rebuild 등의 작업으로 정상화 될수있습니다.

다만 index rebuild 등으로 타 프로그램에도 영향을 줄수 있으므로 통계정보 백업후에 하시기 바랍니다.


by 당근 [2016.07.05 09:21:28]

네 실행된 계획을 확인 중입니다

rebuild 도 다시 해보겠습니다.

감사합니다.

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