我有一个如下所示的查询,表 A、T、S 有大约 100 万行,而 P 有超过 1 亿行。我在这个查询中新引入了内联视图“temp”,它导致性能急剧下降。为 temp 检索到的数据几乎没有 50 行,而且这个内联查询在单独执行时会迅速运行。
自动跟踪统计显示“一致获取”的数量从 6 位数字显着增加,然后将 temp 添加到 9 位数字!此外,超过 90% 的 LAST_CR_BUFFER_GETS 用于“临时”视图。如果我将此视图中的数据提取到一个临时表中并将该表用作连接的一部分,则性能非常好,但该解决方案对我来说并不可行。
我知道这个问题非常笼统,但我想知道使用这个内联视图是否有什么小错误。内联视图不会提供与将这些数据放在临时表中相同的性能吗?有什么方法可以提示 Oracle 以有效的方式使用此视图,从而提高性能。
select t.id,
a.date
from A a,
T t,
P p,
S s,
(select id
from S,
R
where s.id = r.id
and r.code = 10
r.code1 = 20
r.name = 'string1' ) temp
where ...cond1
...cond2
...cond2
s.id = temp.id