我有一个很长的查询,里面有很多让子查询加入的查询。它有一些性能问题。我刚刚将子查询放入新函数中,该函数执行该子查询并将输出存储在集合中(包含用户定义对象的用户定义表)。当我使用此函数执行外部查询时,它的性能要比子查询好,但我们找不到发生这种情况的答案。
示例:现有查询
select *
from a
left join (select * from b left join c on b.something =c.something where b.something=`something`) d on a.something = d.something
更新查询
create object user_obj as ( column_name varchar, column_name varchar);
create or replace TYPE table_name AS TABLE OF user_obj;
create function test (something) as
report table_name := table_name();
Begin
for i in (select * from b left join c on b.something =c.something where
b.something='something')loop
report.EXTEND;
report(report.count) := (user_obj(i.firstcolumnvalue,
i.secondColumnValue))
end loop;
return report;
End
通过外部查询调用功能
select * from a left join (select * from table(test(input_data))) d on a.something = d.something
通过函数执行时,与内联查询相比,它具有更好的性能
我想要一个为什么功能性能更好的原因