Страница 1 из 1
Посоветуйте, как ускорить выборку
Добавлено: 23 сен 2005, 11:54
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 месяцев. Может подскажете, как его видоизменить, чтобы выборка шла быстрее.
Заранее, спасибо!
Добавлено: 23 сен 2005, 12:20
Den
В чем именно состоит задача. Опиши словами...
Добавлено: 23 сен 2005, 12:26
Алексей
.create view t1 as select * from basefin, plpor, basedoc, groupsch
попробуй сделать так:
.create view t1 from basefin, plpor, basedoc, groupsch
т.е. убарть "as select *"
тогда будут выбираться только поля, используемые в отчете.
Я когда убрал, отчет заработал в 4 раза быстрее, может и тебе поможет.
Добавлено: 23 сен 2005, 12:48
Alexx
задача - выбрать платежи с привязкой к ДО за определенный период и по определенной группе ДО
Добавлено: 23 сен 2005, 13:03
Den
юзай хотя бы тогда индекс BASEFIN09...а так конечно он у тебя долго будет отрабатывать.
Добавлено: 23 сен 2005, 13:29
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
Так чтоли?
Добавлено: 23 сен 2005, 13:47
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
......
Добавлено: 23 сен 2005, 13:56
Alexx
прикол в том, что basefin.ddoc - это дата оплаты документа, если платежка не оплачена, то поле пустое, а мне необходимо выбирать по дате выписки платежки
Добавлено: 23 сен 2005, 14:45
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 (остальные фильтры)
Добавлено: 23 сен 2005, 15:44
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 ))