2016-11-03 53 views
3

您好,我的某個視圖有問題。Oracle SQL視圖,其中包含select語句

我用這個語句,視圖倍

where date=(select d from user_date_table) 

這工作正常的結果,但演出]很慢。

當我做到以下幾點:

where date=to_date(

這是快了很多,但因爲我得給查看此值,這將在這裏工作。

還有什麼我可以做的嗎?

現在我已經用一個包含函數package_name.get_user_date的包來測試它,它給了我值。但這也很慢。

有沒有其他的事情可能會使這個查詢更快?

謝謝!

+1

「這要快得多,但這不起作用,因爲我必須給這個視圖這個價值。」......我不明白,你這裏是什麼意思..你有沒有完成你的查詢的解釋計劃?你可以將你的子選擇轉換成一個連接。 – sers

+3

向我們展示完整的查詢,涉及的表的定義以及這兩個查詢的執行計劃。 [**格式化**](http://stackoverflow.com/editing-help#code)文本請,[沒有屏幕截圖](http://meta.stackoverflow.com/questions/285551/why-may-i -not-upload-images-code-on-so-when-asking-question-285557#285557) –

+0

'user_date_table'中的'd'列中只有一個日期嗎?難以置信。如果有多個日期,則查詢將不起作用。所以,如果它確實有效,那麼你並沒有向我們展示你真正的問題。爲什麼不?無論如何:在子查詢中,'(從...選擇TO_DATE(d,'......')....)' – mathguy

回答

0

有兩種可能的方法可以嘗試並解決此問題。 user_date_table中是否有重複日期?

如果不是,則可以在查詢中加入此表而不是將其放入where子句中。

如果確實如此,那麼你可以在視圖的查詢從yourTable牛逼 其中存在 改變 選擇... ( SELECT * 從user_date_table UDT 其中udt.d = r.date )

此外,請檢查並查看user_date_table上的索引。也許在to_date(d)上有一個基於函數的索引,這就是爲什麼這個工作更快。