내가이 쿼리를이 곳에서 함수와 성능을 향상되지 않습니다지수는 절
select col1,col2, x.id pk
/*+ INDEX (some_index_on_col4)*/
from tbl1 y
,tbl2 x
where col2 = 'some_value' and col3 = 'U'
and x.col4 = dbms_lob.substr(REPLACE(y.PK_DATA,'"',''), 100, 1)
;
쿼리가 매우 느립니다, 나는 계획을 설명 할 때, 인덱스가 사용되지 않음을 보여줍니다 그러나 전체 테이블 스캔 내가
dbms_lob.substr(REPLACE(y.PK_DATA,'"',''), 100, 1)
를 제거하는 경우, 대신 사용하고 말을한다 대신
x.col4 = 3456
이 잘 작동하고, 어떻게 향상시킬 수 있습니까?
N.B. : TBL2이 분할
당신은 또한 실행 계획을 게시 할 수 있습니다 사용 두 쿼리에 기재 한 바와 같이 [여기] (http://stackoverflow.com/questions/34975406/how-to-describe-performance-issue-in-relational-database?answertab=active#tab-top) –
당신이 그것을 변경하는 경우 'x.col4 = 3456'으로 변경하면 오라클은 관심있는 x.col4 값 (3456)이 하나뿐이므로 명확하게 색인을 사용할 수 있음을 알고 있습니다. 'dbms_lob.substr (REPLACE (y.PK_DATA, ' "', ''), 100, 1)'을 선택하면 여러 x.col4 값이 선택 될 수 있습니다. 옵티마이 저는 전체 스캔이 바람직하다고 결정할 수 있습니다. –
실제로 일치하지 않았으므로 전체 스캔이 어떤 식 으로든 수행되었으므로 인덱스가 사용되지 않은 이유입니다 ... 그러나 일치하는 것이 있으면 인덱스가 사용됩니다. –