My PL/функции SQL делает вставку в таблицу:Используйте намек, только если условие выполняется
procedure MY_PROC(n in number default null) is
begin
insert into MY_TABLE T
select ...
from ...;
end;
Моей проблема: если n
равно нуль, запрос идет очень медленно, и я обнаружил, что с помощью materialize
подсказка (да, я знаю, что она недокументирована) решает проблему. НО если n
не является нулевым, то запрос, который был быстрым, теперь медленный из-за этого намека!
Так есть способ использовать подсказку только в том случае, если выполнено условие? Мне сложно использовать динамический SQL (execute immediate
), но я хотел бы избежать этого.
Спасибо!
Как вы знаете, что 'materialize' намек решает проблему? Вы сравнили планы выполнения, чтобы понять, почему? –
Ну, время исполнения - хороший параметр, не так ли? 10s против нескольких минут ... – Emmanuel
Знаете ли вы, как планы будут масштабироваться с реалистичными и изменяющимися объемами данных и входными параметрами? Если вы не знаете, что такое план, вы не знаете, как он будет себя вести в разных условиях. Добавление подсказки только потому, что, казалось, ускорилось в одном экземпляре, не является надежным методом настройки запроса. –