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


Ответить