0
我有一个名为t(abc varchar2(50),xyz varchar2(50),..etc)的表,并在列abc上启用了索引。 Oracle使用索引userfunction(a)
需要很长时间。这是一个动态查询形成的可以有另一个条件,必须使用abc索引,所以我不想使用no_index提示。Oracle在sql查询中没有函数调用的索引
select *from t
where
userfunction(a) = 0
and exists (select 1 from tab where t.abc='' ...etc)
and ..etc
我试图通过移动功能,以嵌套查询重新编写与嵌套查询的查询,但甲骨文是重新书写,并在第一仍在执行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)'?我不认为问题在于Oracle使用索引来访问数据。但也许它可以使用更合适的索引。这将有助于查看整个查询。另外:'userfunction'是确定性的(即,如果我称之为明年,我是否会得到相同的结果)? –
它是userfunction(abc)。这不是确定性的。基本上它是非常昂贵的功能,我希望这只能在最后和子句中调用。 – user1181858