Hello, All!
Есть(не у меня) запрос, в котором джойнятся две процедуры, и, что самое
неприятное, лефтом. Подумав, а потом почитав
http://www.ibase.ru/devinfo/dataaccesspaths.htm
"Так как алгоритм слияния не поддерживается для внешних соединений,
то всегда будет выбран рекурсивный алгоритм."
Выходит что для такой ситуации выхода нет и в ближайшее время не придвидится?
(как обойти проблему понятно, но интересует именно возможность слияния для
внешних соединений - это какое-то принципиальное ограничение?)
10 вызовов p2
select * from
proc_1 p1
join proc_2 p2 on p1.id_1=p2.id_2
PLAN MERGE (SORT (PROC_2 NATURAL), SORT (PROC_1 NATURAL))
200 вызовов p2
select * from
proc_1 p1
left join proc_2 p2 on p1.id_1=p2.id_2
PLAN JOIN (PROC_1 NATURAL, PROC_2 NATURAL)
create procedure proc_2
returns (id_2 integer)
as
declare variable q integer;
begin
id_2 = 20;
while (id_2>0) do
begin
suspend;
id_2 = id_2 - 2;
q = gen_id(gen_1, 1);
end
end
CREATE PROCEDURE PROC_1
RETURNS (
ID_1 INTEGER)
AS
begin
id_1 = 20;
while (id_1>0) do
begin
suspend;
id_1 = id_1 - 1;
end
end
--
-=Чисто прибранная квартира - признак неисправного компьютера.=-
With best regards, Nikolay Ponomarenko