我有一个名为t的表(abc varchar2(50),xyz varchar2(50),.. etc),并且在列abc上启用了索引。 Oracle使用userfunction(a)
的索引需要很长时间。这是一个动态查询形成可以有另一个条件,必须使用abc上的索引,所以我不想使用no_index提示。
select *from t
where
userfunction(a) = 0
and exists (select 1 from tab where t.abc='' ...etc)
and ..etc
我尝试通过将函数移动到嵌套查询来重新编写带有嵌套查询的查询,但是oracle正在重写并且仍然在第一次执行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子句中使用某些条件?
答案 0 :(得分:0)
您的查询在逻辑上不一致:您引用表t和tab,但仅限于desribe t。假设您在编写选项卡时意味着,我无法理解您为什么需要带有子查询的exists子句。当subselect中的表达式求值为TRUE时,EXISTS将返回TRUE;那么为什么不在t?
的主查询中使用该表达式呢?