We’re accessing a view from another team’s database and to make it a lot simpler, the view looks a bit like this:
x
create view x_view as
select
x.exec_time,
from
stuff x
where
x.exec_time > SYSDATE -2
and
;
and when accessing the view, we further filter on the same column:
select
*
from
x_view x
where
trunc(x.exec_time) = %1
and
;
since I’d rather not change the view, but still get our query done fast and with a stable execution plan, I want to tell them what Indices would be beneficial. But how do I deal with those 2 predicates on the date field? I have those 3 options:
- add exec_time AND trunc(exec_time) to the index
- only exec_time in the index
- only trunc(exec_time) in the index
or is this construct so problematic that we should rather make a different view?
EDIT: I believe it’s oracle 11.2
Advertisement
Answer
Change your query to be:
where x.exec_time >= %1
and x.exec_time < %1 + 1
and then a single index on EXEC_TIME should do the trick (obviously we are not considering other predicates you might have here)