2016-04-13 10 views
0
select count(*) as a 
    from event 
    where eventName='ARTICLE' 
    and to_char(event_date,'DD-MM-YYYY')= '08-04-2016'; 

特定の日付形式を使用して日付を比較したいのですが、このクエリを実行すると時間がかかります。最低限の時間で同じ結果が得られる方法はありますか?to_date/to_char関数を使用せずにoracle sqlの日付を比較するにはどうすればよいですか?

+2

文字列に 'to_date'を実行するのではなく、' date_'である 'event_date'の' to_char'をなぜやっていますか? 'event_date'の時間コンポーネントを深夜に設定しようとしていますか?利用可能なインデックスは何ですか? 'event_date'はインデックスされていますか?テーブルにはどのようなインデックスが定義されていますか? –

+0

私は一日をしたいと思う。 '08 -04-2016 '、' dd-mm-yyyy ')とto_date('09 -04-204-')の間にevent_dateとeventName = 'ARTICLE' の のイベントから としてselect count(* 2016 '、' dd-mm-yyyy ')' – dcieslak

+0

テーブル構造(インデックスを含む)とクエリの実行計画を投稿してください – Aleksej

答えて

1

EVENT_DATEにインデックスがありますか?あなたがしなければ、あなたは完全なテーブルスキャンを持っており、それはインデックスを構築することなくそれが得られるのと同じくらい速いです。

インデックスをお持ちの場合は、to_char()が無効にするため、クエリで使用されません。あなたのテーブルに十分な異なる日付があり、インデックスを使用する価値があるように、それらが十分にまとまっているとしましょう。いくつかの方法でインデックスを使用するようにクエリを変更することができます。

EVENT_DATEがEVENT_DATEは時間要素がこの

where event_date >= date '2016-04-08' 
and event_date < date '2016-04-09' 

注意を使用含まれている場合のみ、日付要素がこの

where event_date = date '2016-04-08' 

を使用含まれている場合は、その特別な方法でOracleを格納しDATE値は。それらは特定のマスクと共に格納されません。書式設定は単なる表示物です。だから私たちがする必要があるのは、意味のある形式で目標の日付を渡すことだけです。

関連する問題