【发布时间】:2020-03-04 13:58:09
【问题描述】:
我们在 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) 吗?
【问题讨论】:
-
结果缓存已关闭? docs.oracle.com/database/121/TGDBA/…
-
Google:Oracle 中的 RESULT_CACHE。
-
使用相同的 :Code 值?尝试查看统计数据,看看它在做什么。我怀疑第一次执行是从磁盘读取索引和表的块,所以它很慢(尽管 70 秒对于 5M 行来说太慢了,除非你有一个非常慢的磁盘子系统),下次它们在内存,所以没有 I/O。或者可能是 result_cache,正如其他人所建议的那样。
-
Oracle 中存在参数嗅探,称为自适应游标共享 (ACS)。
标签: sql oracle query-performance