Oracle SQL-带时间戳的查询-慢速

Oracle SQL-带时间戳的查询-慢速,sql,oracle,Sql,Oracle,我正试图编写一个查询,从一个类型为:TIMESTAMP(6)且带有本地时区的列中查找昨天的所有记录 我面临的问题是,查询运行速度非常慢,我想知道在使用时间戳格式进行查询时,是否有一些操作不正确 select * from inventory_transaction WHERE Complete_timestamp >= to_timestamp(sysdate-1) and Complete_timestamp < to_timestamp(sysdate); 从库存交易中选择*

我正试图编写一个查询,从一个类型为:TIMESTAMP(6)且带有本地时区的列中查找昨天的所有记录

我面临的问题是,查询运行速度非常慢,我想知道在使用时间戳格式进行查询时,是否有一些操作不正确

select * from inventory_transaction
WHERE Complete_timestamp >= to_timestamp(sysdate-1) 
and Complete_timestamp < to_timestamp(sysdate);
从库存交易中选择*
其中Complete_timestamp>=to_timestamp(sysdate-1)
并完成_timestamp<至_timestamp(sysdate);
首先,如果您想要“昨天”,逻辑是:

select *
from inventory_transaction
where Complete_timestamp >= trunc(sysdate - 1) and
      Complete_timestamp < trunc(sysdate);
选择*
来自库存交易记录
其中Complete_timestamp>=trunc(sysdate-1)和
完成时间戳
这里重要的是
trunc()
,因此您可以获得日历日。否则,你就有了比较中的时间。尽管名称不同,
sysdate
有一个时间组件

我也会使用
sysdate-interval'1'day
,但这对性能或结果没有影响

为什么这么慢?可能有多种原因。最可能的情况是,
库存\交易
是一个表。在这种情况下,您需要一个
inventory\u事务(complete\u timestamp)
索引

另一种可能是有很多数据。数据越多,数据库读取时间就越长。除了升级服务器或更改服务器参数(如果这些参数不太理想),没有其他方法可以解决这个问题


另一种可能性是,
库存交易
实际上是一种视图。如果是这种情况,则需要优化视图。底层列上的索引可能会加快查询速度。但是,可能需要优化整个视图。

不要使用日期数据类型的时间戳-这是隐式数据类型转换。只需使用
systimestamp interval'1'day
cast(…作为时间戳)
为什么不使用
systimestamp
?去掉谓词中的函数调用会有所帮助,但更可能的情况是,您需要完整的_timestamp列上的索引和/或基于成本的优化器的准确表统计信息。你能发布查询的解释计划吗?