2016-11-03 2 views
3

こんにちは私は自分の意見に問題があります。select文を使用したOracle SQLビュー

私はこの文ビュー回数

where date=(select d from user_date_table) 

を使用これは結果のために正常に動作しますが、もパフォーマンスが非常に遅いです。

私は次のようにします。

where date=to_date(

これは、はるかに高速ですが、私は、ビューにこの値を与えなければならないので、これはここでは動作しません。

他に何かできますか?

今私は値を与える関数package_name.get_user_dateを持つパッケージでテストしました。しかしこれも非常に遅いです。

このクエリを高速化する可能性のあるものは他にありますか?

ありがとうございました!

+1

「これはかなり速いですが、私はこの値を表示する必要があるため、ここでは機能しません」... ...私は理解していません、あなたがここで何を意味するのですか。 ?あなたは副選択を結合に変換することができます。 – sers

+3

完全なクエリ、関連するテーブルの定義、および両方のクエリの実行計画を表示します。 [** Formatted **](http://stackoverflow.com/editing-help#code)text、[スクリーンショットなし](http://meta.stackoverflow.com/questions/285551/why-may-i) 285557#285557) –

+0

'user_date_table'の' d'列には日付は1つだけありますか?信じがたい。複数の日付がある場合、クエリは機能しません。だから、もしうまくいけば、あなたは本当の質問を私たちに提示していません。何故なの?とにかくサブクエリで '(TO_DATE(d、 '......')を選択して....どこか....)' – mathguy

答えて

0

これを試して解決する方法は2つ考えられます。 user_date_tableに日付が重複していますか?

そうでなければ、where句に入れるのではなく、クエリのこのテーブルに参加できます。それがない場合は

は、その後、あなたが 存在yourTableトン から選択 ... にビューでクエリを変更することができます(user_date_table UDT から選択 を* どこudt.d = r.date )

また、user_date_tableにあるインデックスを確認して確認してください。たぶん、to_date(d)に関数ベースのインデックスがあるため、これはより速く動作します。