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

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

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

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字段上的这两个 predicate 呢?我有三个选择:
将exec\u time和trunc(exec\u time)添加到索引中
索引中仅执行时间
索引中只有trunc(exec\u time)
或者这个结构有问题以至于我们应该提出不同的观点?
编辑:我相信是oracle11.2

2vuwiymt

2vuwiymt1#

将查询更改为:

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

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

相关问题