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