У меня есть один длинный запрос, в котором есть много 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
Когда я выполняю через функцию, это дает мне лучшую производительность по сравнению со встроенным запросом
Мне нужна причина, почему производительность лучше в функции