Страница 1 из 1

Ещё один plan

Добавлено: 12 июн 2009, 02:03
QuAzI
Есть три таблицы. Таблица движения и две таблицы-справочники.
Есть запрос

Код: Выделить всё

SELECT
DVIG.KODGOS,
DVIG.IND,
SPR_IZD.NAIMIZD,
DVIG.DATA_VIH,
DVIG.KODPERSPIS,
DVIG.DATA_SPIS,
DVIG.KOL,
DVIG.NOMER,
SPR_IZD.ID_OBL,
SPR_CEN.OTPCRBEZNDS,
SPR_CEN.OTPCR,
SPR_CEN.ROZCEN,
SPR_CEN.REALIZ
FROM
DVIG
LEFT JOIN SPR_IZD ON DVIG.ID_IZD=SPR_IZD.ID_OBL
JOIN SPR_CEN ON DVIG.ID_CENA=SPR_CEN.ID
WHERE (DVIG.DATA_VIH>'25.02.2009') AND (DVIG.DATA_VIH<'31.05.2009') 
ORDER BY
SPR_IZD.NAIMIZD, DVIG.IND, DVIG.DATA_VIH
На локальной базе FB1.5 (Athlon AM2 3800+, 1Gb RAM) возвращает 13625 записей за 14 секунд. Долговато.

IB Expert выдаёт на это дело план

Код: Выделить всё

Plan
PLAN SORT (JOIN (JOIN (DVIG NATURAL,SPR_IZD NATURAL),SPR_CEN INDEX (PK_SPR_CEN)))
Как ни пытался этот план включить в SQL-запрос, каждый раз получаю

Код: Выделить всё

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 22, char 1.
PLAN.
Как всё-таки прикрутить план, как его стоит изменить? Что можно поджать в самом запросе?
Во всех трёх таблицах из индексов только полько primary key в поле ID. В базе около 70 тысяч записей, каждый месяц добавляется несколько тысяч. Автосборка мусора отключена, сборка запускается планировщиком каждую ночь, после gbak'а базы.

Re: Ещё один plan

Добавлено: 12 июн 2009, 11:52
Dimitry Sibiryakov
Что, даже Foreign Key нет? Ужас какой... Ну тогда хотя бы ручками создай индексы по DVIG.DATA_VIH и SPR_IZD.ID_OBL.

Re: Ещё один plan

Добавлено: 12 июн 2009, 14:49
QuAzI
Хотелось не трогать "Родительскую" базу, но в любом случае после создания индексов стал читать просто потрясающе быстро. То что раньше было 13-14сек теперь около 400мс выбирается. Спасибо.
Жаль что планами я так и не понял как пользоваться =)

Re: Ещё один plan

Добавлено: 14 июн 2009, 07:21
dimitr
QuAzI писал(а):Как ни пытался этот план включить в SQL-запрос
он включается *до* кляузы ORDER BY

Re: Ещё один plan

Добавлено: 14 июн 2009, 19:45
kdv
Жаль что планами я так и не понял как пользоваться
и не надо. потому что план без нужных индексов смысла не имеет.

Re: Ещё один plan

Добавлено: 15 июн 2009, 14:17
belov-evgenii
Еще внешнее соединение идет до внутреннего.