当我添加一些注释掉的行时,Oracle 查询运行得更快

Oracle query runs faster when I added some commented out lines

我有一个查询运行缓慢(大约 5 分钟),但是如果我添加这个注释掉的行,它运行得非常快(大约 2 秒),这根本没有意义。 可能是什么解释?

FROM .....
   --CREF.SYSTEM_PARAMETER sp,
     ...
WHERE     ....
   --t.LEDGER_EFFECTIVE_DATE BETWEEN NVL(adhoc.START_DATE, TRUNC(SYSDATE) - sp.value) and nvl(ec.END_DATE, TRUNC(SYSDATE))  -- use t.LEDGER_EFFECTIVE_DATE 

谢谢。

Oracle 在多次执行查询时创建缓存,这可以减少执行时间。您是否多次执行查询?

一种可能是原始查询缓存的执行计划不佳,因此每次数据库看到该查询时都会使用缓存的计划。修改后的版本获得了新的解析和新的执行计划。

也许如果你以某种方式使慢速版本无效(使用 [=10= 收集统计信息],向 table 添加空注释,刷新共享池,重新启动数据库等)它会得到新计划。

您提到 “两者的解释计划完全相同” - explain plan 实用程序显示可能在下一次执行时使用的计划。您需要检查实际的运行时执行计划,而不是解释计划。