Вроде тривиальная задача
Есть таблица:
--------------------------------
ID integer *PK
ID_COUNTER integer *FK
DATE_VALUE date
VALUE double precision
...
--------------------------------
CREATE INDEX POTREB_IDX_DATE_VALUE ON POTREB (DATE_VALUE)
--------------------------------
Необходимо выбрать последнюю запись на заданную дату (:begin_period).
Есть два варианта запроса:
1.
Код: Выделить всё
SELECT FIRST 1
ID,
DATE_VALUE,
VALUE
FROM
POTREB
WHERE
(ID_COUNTER = :VAR_ID_COUNTER)
AND (DATE_TEK <= :begin_period)
ORDER BY
DATE_TEK DESC
Код: Выделить всё
SELECT
ID,
DATE_VALUE,
VALUE
FROM
POTREB
WHERE
(ID_COUNTER = :ID_COUNTER)
AND (DATE_TEK =
(SELECT
MAX(S.DATE_VALUE)
FROM
POTREB S
WHERE
(S.ID_COUNTER = :ID_COUNTER)
AND (S.DATE_VALUE <= :begin_period)
)
)
Оба запроса прекрасно работали на FB 1.5.3, но на FB 2 нещадно тормозят!!!
(130 мс на FB 1.5.3 против 620 на FB 2.0).
Игрался с индексом по DATE_VAL, но ничего не помогло.
Спасибо...