2016-11-21 7 views
0

より最適である私は、比較文を含むOracle SQLクエリのより最適な/効率的な構文は何か興味があった:タイムスタンプ+間隔のOracle SQL to_date。

WHERE time_stamp + INTERVAL '+1' HOUR 
     BETWEEN to_date('13-08-2016 17:02', 'dd-mm-yyyy hh24:mi:ss') 
      AND to_date('21-11-2016 16:02', 'dd-mm-yyyy hh24:mi:ss') 

または

WHERE time_stamp 
     BETWEEN to_date('13-08-2016 17:02', 'dd-mm-yyyy hh24:mi:ss') - INTERVAL '+1' HOUR 
      AND to_date('21-11-2016 16:02', 'dd-mm-yyyy hh24:mi:ss') - INTERVAL '+1' HOUR 

SQLパーサは、最適化の仕事をするだろうか?

答えて

0

そのtime_stamp列にインデックスがあるかどうかによって異なります。 インデックスをお持ちの場合は、その列に対して式や関数を使用しないことをお勧めします。 そのため、列にインデックスがある場合は、2番目のクエリの方がパフォーマンスが向上します。

2

ように私はこれらを書いて助言する:ISO形式の定数のDATETIMESTAMPの使用はちょうど(私の意見で)コードクリーナーを保持

WHERE time_stamp BETWEEN TIMESTAMP '2016-08-13 17:02:00' - INTERVAL '1' HOUR AND 
         TIMESTAMP '2016-11-21 16:02:00' - INTERVAL '1' HOUR 

また、「定数」の日付演算を使用すると、適切なインデックスが使用可能な場合にオプティマイザがインデックスを使用しやすくなります。

+1

"*私の意見では、コードクリーナーを*維持します;) –