Oracle函数的性能优于内联查询

时间:2018-11-01 09:02:32

标签: oracle performance function compare subquery

我有一个很长的查询,里面有很多让子查询加入的查询。它有一些性能问题。我刚刚将子查询放入新函数中,该函数执行该子查询并将输出存储在集合中(包含用户定义对象的用户定义表)。当我使用此函数执行外部查询时,它的性能要比子查询好,但我们找不到发生这种情况的答案。

示例:现有查询

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

通过函数执行时,与内联查询相比,它具有更好的性能

我想要一个为什么功能性能更好的原因

0 个答案:

没有答案