0
이름이 t (abc varchar2 (50), xyz varchar2 (50), ..etc)이고 abc 열에서 색인이 활성화 된 테이블이 있습니다. 오라클은 userfunction(a)
에 대한 색인을 사용하는데 오랜 시간이 걸립니다. 이것은 동적 쿼리가 abc에 인덱스를 사용해야하는 다른 조건을 가질 수 있으므로 no_index 힌트를 사용하고 싶지 않습니다. SQL 쿼리에서 함수 호출에 대한 색인이 없습니다.
select *from t
where
userfunction(a) = 0
and exists (select 1 from tab where t.abc='' ...etc)
and ..etc
는 I 중첩 조회하는 기능을 이동하여 중첩 쿼리 질의를 재 작성했지만, 오라클 재기록 여전히 처음
userfunction(a)
을 실행하고 쿼리는 많은 시간이 소요된다.
select *from (
select *from t
where
and exists (select 1 from tab where t.abc='' ...etc)
..etc
)
userfunction(a) = 0
또한 WITH 절을 사용했지만 운이 없다.
oracle은 사용자 함수 호출이나 where 절의 특정 조건에 대해 인덱스를 사용하지 않으려합니다.
사용자 기능이란 무엇입니까? –
'userfunction (a)'또는'userfunction (abc)'? 오라클이 데이터에 액세스하기 위해 인덱스를 사용한다는 것이 문제는 아니라고 생각합니다. 그러나 아마도 더 적절한 색인을 사용할 수있을 것입니다. 그것은 전체 질의를 보는 것을 도울 것입니다. 또한 :'userfunction'은 결정적입니다 (즉, 내년에는 같은 값으로 동일한 결과를 얻을 것인가?). –
userfunction (abc)입니다. 결정적이지 않습니다. 기본적으로 매우 값 비싼 함수이므로, 마지막과 절에서만 호출되기를 바랍니다. – user1181858