代码之家  ›  专栏  ›  技术社区  ›  EasterBunnyBugSmasher

在已筛选日期的视图上查询trunc(日期)

  •  0
  • EasterBunnyBugSmasher  · 技术社区  · 4 年前

    我们从另一个团队的数据库访问一个视图,为了使其更简单,该视图看起来有点像:

    create view x_view as
    select
      x.exec_time,
      ...
    from
      stuff x
    where
      x.exec_time > SYSDATE -2
     and
      ...
    ;
    

    select
      *
    from
      x_view x
    where
      trunc(x.exec_time) = %1
     and
      ...
    ;
    

    因为我不想改变视图,但仍然可以快速完成查询,并且有一个稳定的执行计划,所以我想告诉他们哪些索引是有益的。但是如何处理date字段上的这两个谓词呢?我有三个选择:

    • 将exec_time和trunc(exec_time)添加到索引中
    • 索引中只有exec_时间

    1 回复  |  直到 4 年前
        1
  •  2
  •   Connor McDonald    4 年前

    改变 你的

    where x.exec_time >= %1
    and   x.exec_time < %1 + 1