Посоветуйте, как ускорить выборку

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Alexx
Постоянный обитатель
Сообщения: 168
Зарегистрирован: 29 мар 2005, 17:49

Посоветуйте, как ускорить выборку

Сообщение Alexx »

Есть ард-отчет вот с таким запросом

.create view t1 as select * from basefin, plpor, basedoc, groupsch
where ((word(2) == basefin.direct and
basefin.cplpor == plpor.nrec and
basefin.cbasedoc == basedoc.nrec and
plpor.cgroupsch == groupsch.nrec)) and
(basefin.tidkgal = 1 or basefin.tidkgal = 10) and
plpor.datvip >= dbegin and
plpor.datvip <= dkon and
groupsch.nrec = comp(gr_nrec);

Проблема в том, что работает он довольно долго, минуты 3-5 лопатит данные за 8 месяцев. Может подскажете, как его видоизменить, чтобы выборка шла быстрее.

Заранее, спасибо!
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

В чем именно состоит задача. Опиши словами...
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

.create view t1 as select * from basefin, plpor, basedoc, groupsch

попробуй сделать так:
.create view t1 from basefin, plpor, basedoc, groupsch

т.е. убарть "as select *"

тогда будут выбираться только поля, используемые в отчете.
Я когда убрал, отчет заработал в 4 раза быстрее, может и тебе поможет.
Alexx
Постоянный обитатель
Сообщения: 168
Зарегистрирован: 29 мар 2005, 17:49

Сообщение Alexx »

задача - выбрать платежи с привязкой к ДО за определенный период и по определенной группе ДО
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

юзай хотя бы тогда индекс BASEFIN09...а так конечно он у тебя долго будет отрабатывать.
Alexx
Постоянный обитатель
Сообщения: 168
Зарегистрирован: 29 мар 2005, 17:49

Сообщение Alexx »

2Den

basefin09 это
direct+ddoc+nodoc

т.е. вместо
plpor.datvip >= dbegin and
plpor.datvip <= dkon and

юзать

basefin.ddoc >= dbegin and
basefin.ddoc <= dkon and

и плюс еще basefin.nodoc == plpor.nodoc

Так чтоли?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

.....
where ((word(2) == basefin.direct and
date(01,09,2005)<<=basefin.ddoc and
date(22,09,2005)>>=basefin.ddoc and
basefin.cplpor == plpor.nrec and
basefin.cbasedoc == basedoc.nrec
......
Alexx
Постоянный обитатель
Сообщения: 168
Зарегистрирован: 29 мар 2005, 17:49

Сообщение Alexx »

прикол в том, что basefin.ddoc - это дата оплаты документа, если платежка не оплачена, то поле пустое, а мне необходимо выбирать по дате выписки платежки
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

какая разница....беги тогда с plpor

.....
where ((Root==plpor.tidkgal
and (plpor.tidkgal=1 or plpor.tidkgal=10)
and date(01,09,2005)<<=plpor.datvip and
date(22,09,2005)>>=plpor.datvip and
plpor.nrec==basefin.cplpor
and basefin.cbasedoc == basedoc.nrec
.......
))
and (остальные фильтры)
WiRuc
Местный житель
Сообщения: 414
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж

Сообщение WiRuc »

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

.create view t1 
from basefin, plpor, basedoc, groupsch 
where ((
dbegin <<= plpor.datvip and
dend   >>= plpor.datvip and
comp(gr_nrec) == plpor.cgroupsch (noindex) and
plpor.nrec == basefin.cplpor and
(1 == basefin.tidkbase  or 10 == basefin.tidkbase) and 
word(2) == basefin.direct (noindex) and
basefin.cbasedoc == basedoc.nrec and 
plpor.cgroupsch == groupsch.nrec ))
Ответить