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 чтений.
--
Сергей Смирнов.