我们正在从另一个团队的数据库访问一个视图,为了使其更简单,该视图看起来有点像:
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
1条答案
按热度按时间2vuwiymt1#
将查询更改为:
然后,在exec\u时间上使用一个索引就可以做到这一点(显然,我们并没有考虑您在这里可能使用的其他 predicate )