我们在Oracle查询中看到一个非常奇怪的情况。下面的查询,
SELECT e.C1, MAX (e.Some)
FROM MyTable e
WHERE e.Code = :Code
GROUP BY E.C1
ORDER BY MAX (e.Some)
请注意,该表包含约500万条记录,而Code是主键。
第一次尝试时,它将在60/70秒内返回该值,但在此之后,它将在500毫秒内返回结果。
Oracle中是否有任何参数嗅探,或者我们可以在Oracle中具有OPTION(RECOMPILE)?
答案 0 :(得分:1)
Oracle查询在第二次或第三次执行时可能会加速的原因有几个:
set autotrace on
后,在SQL * Plus中多次运行查询。如果“物理读取”的值在第一次运行后消失,则缓存导致了差异。但是缓存也可以在存储或操作系统级别进行。答案 1 :(得分:0)
它可能没有使用主键的索引。尝试说明计划检查。尝试使用规则库来强制使用索引:
select /*+ RULE */ from ...
另外,请DBA运行表分析以更新统计信息。