甲骨文 11g
我有一个查询,其示意图如下所示:
select *
from
(
--My inline view
select ...
)
order by
field1, field2;
我的内联视图是来自多个带有索引的表的复杂查询。
如果我只执行内联视图,使用索引和查询的 Oracle 执行速度很快。但是如果执行整个查询,Oracle 不使用索引并且查询执行速度很慢。
我找到了一种解决方案(使用两个步骤):
-- 1. I just creating temp table from my inline view (no sorting)
create global temporary table tmp
on commit preserve rows
as
--My inline view (Here Oracle using indexes and query runs fast)
select ...
-- 2. Now I sort it (result set is not very large and this runs also fast)
select *
from tmp
order by
field1, field2;
但如果可能的话,我想使用更简单的方法而不使用临时表。
我尝试使用“with” - 不走运,同样的问题。
很抱歉没有发布实际查询。它只是太复杂了,而且很难编写说明问题的示例脚本。
更新
子查询是多个UNION ALL
来自SLOT, SLOT_O
与 table 连接的表TLG_INFORM
。
TLG_INFORM
有一个索引IDX_TLG_INFORM_PAIR
,它在没有ORDER BY
和不使用的情况下使用 With ORDER BY
。
执行计划:
我尝试使用WITH
和提示/*+MATERIALIZE*/
。没运气。此外,没有提示/*+MATERIALIZE*/
索引也没有使用ORDER BY
。