我们如何在很少的情况下调整一个简单的选择查询



我有一个如下所示的查询。

select col1,col2,col3,col4
from   table
where  CHANGETIME BETWEEN 0 AND 86399
AND    changedate+(changetime/86400) > To_Date('parameterised value','MM/DD/YYYY HH24:MI:SS') 
AND    CHANGEDATE >= trunc(To_Date('parameterised value','MM/DD/YYYY HH24:MI:SS'));

该查询在生产环境中获取 20000 到 50000 之间的记录。 但仍然需要至少 50 分钟。 有时也需要 1 到 2 个小时。 我们在一列上有索引,即 更改日期 . 我们有约束,就像无法创建任何新索引一样。请建议我们如何调整此查询。也使用了并行提示,但没有太大改进。请指教。

更改查询,以便所有计算都对参数化值完成,以便查询可以在列上使用索引(而不是需要基于函数的索引(:

select col1,col2,col3,col4
from   table
where  CHANGETIME BETWEEN 0 AND 86399
AND    CHANGETIME >  (  TO_DATE(:value,'MM/DD/YYYY HH24:MI:SS')
                      - TRUNC(TO_DATE(:value,'MM/DD/YYYY HH24:MI:SS'))
                     ) * 86400
AND    CHANGEDATE >= TRUNC(TO_DATE(:value,'MM/DD/YYYY HH24:MI:SS'));

甚至:

select col1,col2,col3,col4
from   table
where  CHANGETIME
         BETWEEN (  TO_DATE(:value,'MM/DD/YYYY HH24:MI:SS')
                  - TRUNC(TO_DATE(:value,'MM/DD/YYYY HH24:MI:SS'))
                 ) * 86400 + 1
         AND     86399
AND    CHANGEDATE >= TRUNC(TO_DATE(:value,'MM/DD/YYYY HH24:MI:SS'));

最新更新