如果你表上列很多的话.
我觉得你可以在fieldlist ,order_date,order_status建联合索引.
然后把句子改成:
Select /*+ index_ffs(order_head indexname) */fieldlist
from order_head
where order_date = :2
and order_status:3
and order_status:4
不妨试一下.
问题解决了
原因有点抓狂。
前台程序员在传参数的时候莫名其妙将日期参数转换为了timestamp类型,造成oracle执行过程中的隐式转换。
简单测试如下。
select * from order_header oh
where oh.order_date between trunc(sysdate) and sysdate
―――――――――――――――――
SELECT STATEMENT, GOAL = CHOOSE
TABLE ACCESS BY INDEX ROWID 对象名称=ORDER_HEADER
INDEX RANGE SCAN对象名称=ORDER_HDR_DATE
――――――――――
select * from order_header oh
where oh.order_date between CAST(trunc(sysdate) AS TIMESTAMP)
and CAST(sysdate AS TIMESTAMP)
――――――――――――――――
SELECT STATEMENT, GOAL = CHOOSE