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

pdtvr36n  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(939)

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

  1. create view x_view as
  2. select
  3. x.exec_time,
  4. ...
  5. from
  6. stuff x
  7. where
  8. x.exec_time > SYSDATE -2
  9. and
  10. ...
  11. ;

在访问视图时,我们进一步过滤同一列:

  1. select
  2. *
  3. from
  4. x_view x
  5. where
  6. trunc(x.exec_time) = %1
  7. and
  8. ...
  9. ;

因为我不想改变视图,但仍然可以快速完成查询,并且有一个稳定的执行计划,所以我想告诉他们哪些索引是有益的。但是如何处理date字段上的这两个 predicate 呢?我有三个选择:
将exec\u time和trunc(exec\u time)添加到索引中
索引中仅执行时间
索引中只有trunc(exec\u time)
或者这个结构有问题以至于我们应该提出不同的观点?
编辑:我相信是oracle11.2

2vuwiymt

2vuwiymt1#

将查询更改为:

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

然后,在exec\u时间上使用一个索引就可以做到这一点(显然,我们并没有考虑您在这里可能使用的其他 predicate )

相关问题