我们有一个相对经典的场景,其中应用程序生成的查询的日期子句对给定日期使用“大于”。
因为日期范围没有结束子句,oracle 没有选择使用日期索引,而是最终进行了非常昂贵的表扫描。但是我们知道这些数据是暂时的,所以我们知道未来没有数据。因此,如果我们修改 sql 以包含该时间段的 sysdate 结束日期,那么查询将使用索引并且它变得非常便宜。
不幸的是,由于我们使用的应用程序存在错误,我们无法更改应用程序。那么在 Oracle 中有什么方法可以“教”oracle 该表中的最大数据是今天,所以它可以做出明智的决定,或者是在数据库级别解决这个问题的唯一真正方法来固定计划?
Rgds,丹
(Oracle 10 Solaris Sparc)
如果您使它们保持最新,Oracle 应该能够使用统计信息来确定任何列的高值和低值: