Функция Oracle работает лучше, чем встроенный запрос - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть один длинный запрос, в котором есть много let-соединений с подзапросами. У него есть проблемы с производительностью. Я только что поместил подзапросы в новую функцию, и функция выполняет эти подзапросы и сохраняет выходные данные в коллекции (определяемой пользователем таблице, которая содержит определенный пользователем объект). когда я выполняю внешний запрос с этой функцией, он работает лучше, чем подзапросы, но мы не нашли ответа, почему это произошло.

Пример: существующий запрос

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

Когда я выполняю через функцию, это дает мне лучшую производительность по сравнению со встроенным запросом

Мне нужна причина, почему производительность лучше в функции

...