2016-11-21 55 views
0

我很好奇什麼是更優化/效率比較含甲骨文聲明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

我勸寫這些爲:

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 

爲ISO格式的常量使用的DATETIMESTAMP只是不斷代碼更加清晰(在我看來)。

此外,對「常量」使用日期算法可以使優化器更容易使用索引(如果有合適的索引)。

+1

「*保持代碼更清潔*」 - 在我看來也是如此;) –