On Fri, 26 Oct 2007 14:13:34 +0400, Dmitry Yemanov <[EMAIL PROTECTED]> wrote:

> Высылай мне базу.

Как я уже говорил, пример легко воспроизводим.
Вот этим скриптом создавал таблицу в пустой базе:

create table Test (id integer not null);
alter table Test add constraint PK_TEST primary key (ID);
create generator gen_test;
commit work;
insert into Test (id) values (gen_id(gen_test, 1));
insert into Test (id) values (gen_id(gen_test, 1));
commit work;
insert into Test (id) select gen_id(gen_test, 1) from Test t where 
gen_id(gen_test, 0) < 2000;
commit work;


Собственно, запрос:
select t.id, min(t1.id)
   from Test t join Test t1 on t1.id >= t.id
   where not exists (select * from Test p where p.id = t.id-1) and
         not exists (select * from Test p where p.id = t1.id+1)
   group by t.id


На 1.0.3 выполняется мгновенно, с любым планом, даже с PLAN SORT (JOIN (T1 
NATURAL,T NATURAL)), и выполняет порядка 8000 чтений записей.
На 2.0.3 наоборот, тормозит с любым планом (десяток и более секунд), и 
выполняет порядка 4004000 чтений.

-- 
Сергей Смирнов.

Ответить