【问题标题】:Oracle sql to_date on timestamp + interval. What is more optimalOracle sql to_date 时间戳 + 时间间隔。什么更优化
【发布时间】:2016-11-21 15:19:44
【问题描述】:

我很好奇什么是包含比较语句的 oracle SQL 查询的更优化/更有效的语法:

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 解析器会做优化工作吗?

【问题讨论】:

    标签: sql oracle syntax timestamp


    【解决方案1】:

    我建议将这些写成:

    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
    

    DATETIMESTAMP 用于ISO 格式的常量只会使代码更简洁(在我看来)。

    此外,在“常量”上使用日期算术可以让优化器更容易地使用索引(如果有合适的索引可用)。

    【讨论】:

    • 保持代码更简洁”——我也认为 ;)
    【解决方案2】:

    取决于您是否在该 time_stamp 列上有索引。 如果您有索引,最好不要在该列上执行任何表达式或函数。 因此,如果该列有索引,则第二个查询会执行得更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 2021-08-28
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      • 2016-09-21
      • 2015-11-09
      相关资源
      最近更新 更多