Уважаемые гуру! :)
Столкнулся со странностью.
FB2.1beta2, SQL Dialect 1.
Выполняю запрос:
SELECT *
FROM
fxd$documentmove M,
fxd$document D
WHERE
M.iddocument=D.iddocument
AND D.datewhen<='01-jan-2007'
AND M.idaccd='221.1'
Получаю:
PLAN JOIN (D INDEX (FXD$DOCUMENT_IDX1), M INDEX (FK_FXD_DOCUMENT_1,
FK_FXD_DOCUMENT_2))
Adapted Plan
PLAN JOIN (D INDEX (FXD$DOCUMENT_IDX1), M INDEX (FK_FXD_DOCUMENT_1,
FK_FXD_DOCUMENT_2))
------ Performance info ------
Prepare time = 0ms
Execute time = 5s 609ms
Выполняю тот же запрос но без одного из условий:
SELECT *
FROM
fxd$documentmove M,
fxd$document D
WHERE
M.iddocument=D.iddocument
--AND D.datewhen<='01-jan-2007'
AND M.idaccd='221.1'
В результате
Plan
PLAN JOIN (M INDEX (FK_FXD_DOCUMENT_2), D INDEX (RDB$PRIMARY7))
Adapted Plan
PLAN JOIN (M INDEX (FK_FXD_DOCUMENT_2), D INDEX (INTEG_27))
------ Performance info ------
Prepare time = 0ms
Execute time = 953ms
Вот DDL таблицы fxd$document
create table fxd$document (
iddocument varchar(40) not null,
sysdate date,
datewhen date,
scomment varchar(250),
idclass integer not null,
status integer,
seqid integer not null,
iddocumentparent varchar(40),
docrateusd numeric(15,4),
docrateeur numeric(15,4)
);
alter table fxd$document add primary key (iddocument);
alter table fxd$document add constraint fk_document_2 foreign key
(idclass) references fxd$objclass (idclass);
alter table fxd$document add constraint fk_document_4 foreign key
(iddocumentparent) references fxd$document (iddocument);
create index fxd$document_idx1 on fxd$document (datewhen);
create index fxd$document_idx2 on fxd$document (iddocument);
то есть индекс по datewhen есть. Думал может индекс не в том направлении -
попробовал в условии поменять "больше" на "меньше" - такая же фигня.
Статистика индекса fxd$document_idx1 перестроена.
Подскажите, почему у меня лыжи не едут?