Ещё один plan

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
QuAzI
Сообщения: 11
Зарегистрирован: 17 апр 2008, 02:36

Ещё один plan

Сообщение QuAzI » 12 июн 2009, 02:03

Есть три таблицы. Таблица движения и две таблицы-справочники.
Есть запрос

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

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'а базы.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Ещё один plan

Сообщение Dimitry Sibiryakov » 12 июн 2009, 11:52

Что, даже Foreign Key нет? Ужас какой... Ну тогда хотя бы ручками создай индексы по DVIG.DATA_VIH и SPR_IZD.ID_OBL.

QuAzI
Сообщения: 11
Зарегистрирован: 17 апр 2008, 02:36

Re: Ещё один plan

Сообщение QuAzI » 12 июн 2009, 14:49

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

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: Ещё один plan

Сообщение dimitr » 14 июн 2009, 07:21

QuAzI писал(а):Как ни пытался этот план включить в SQL-запрос
он включается *до* кляузы ORDER BY

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Ещё один plan

Сообщение kdv » 14 июн 2009, 19:45

Жаль что планами я так и не понял как пользоваться
и не надо. потому что план без нужных индексов смысла не имеет.

belov-evgenii
Сообщения: 52
Зарегистрирован: 28 сен 2007, 10:19

Re: Ещё один plan

Сообщение belov-evgenii » 15 июн 2009, 14:17

Еще внешнее соединение идет до внутреннего.

Ответить