Страница 1 из 1
Нужна помощь с запросом
Добавлено: 29 окт 2009, 14:40
Gameus_
Код: Выделить всё
select basedoc.nodoc,basedoc.ddoc
from basedoc,stepdoc,katsopr,katpodr,pick,ttndoc,marpunkt,katnotes
where
((
basedoc.nrec /== stepdoc.cbasedoc
and stepdoc.nrec /== katsopr.cstepdoc
and katsopr.cpodrfrom == katpodr.nrec
and word(11) == pick.wlist
and katpodr.nrec == pick.crec
and 201 == katsopr.vidsopr
and katsopr.nrec /== ttndoc.cdoc
and cokatsopr == ttndoc.wtable
and ttndoc.cpunktr == marpunkt.nrec
and basedoc.cnote /== katnotes.nrec
and (2 = katnotes.status)
))
;
необходимо ограничить выборку по
DocDateFrom <= TTNDOC.DPUNPBEG
and DocDateTo >= TTNDOC.DPUNPBEG
пробовал делать так:
Код: Выделить всё
....
and cokatsopr == ttndoc.wtable
and (
DocDateFrom <= TTNDOC.DPUNPBEG
and DocDateTo >= TTNDOC.DPUNPBEG)
.......
и так:
Код: Выделить всё
......
))
and DocDateFrom <= TTNDOC.DPUNPBEG
and DocDateTo >= TTNDOC.DPUNPBEG
.......
(в этом случае все подцепки делал мягкими)
и в том и в том случае виснет наглухо

если аналогичные условия делать по katsopr.ddoc - все прекрасно отрабатывает
Добавлено: 29 окт 2009, 14:45
Masygreen
где этот запрос виснет (саппорт, отчет)??? телепортация мысли последнее время непопулярна....
Добавлено: 29 окт 2009, 14:48
Gameus_
и в сапорте
и в интерфейсе (по нему выборка в browse делается)
Добавлено: 29 окт 2009, 15:25
Masygreen
Код: Выделить всё
select basedoc.nodoc,basedoc.ddoc
from basedoc,stepdoc,katsopr,katpodr,pick,ttndoc,marpunkt,katnotes
where
((
basedoc.nrec /== stepdoc.cbasedoc
and stepdoc.nrec /== katsopr.cstepdoc
and katsopr.cpodrfrom == katpodr.nrec
and word(11) == pick.wlist
and katpodr.nrec == pick.crec
and 201 == katsopr.vidsopr
and katsopr.nrec /== ttndoc.cdoc
and cokatsopr == ttndoc.wtable
and ttndoc.cpunktr == marpunkt.nrec
and basedoc.cnote /== katnotes.nrec
and (2 = katnotes.status)
))
and date(01,01,2009)<= TTNDOC.DPUNPBEG
and date(01,02,2009) >= TTNDOC.DPUNPBEG
;
запустил у себя .. отработал без проблем .. ... попробуйте поставить все патчи и на uгалтику и на саппорт... проверте версию vip
Добавлено: 30 окт 2009, 01:21
edward_K
весь вопрос в кол-ве.
((
and word(11) == pick.wlist
and pick.crec == katpodr.nrec
and pick.crec == katsopr.cpodrfrom(noindex)
and 201 == katsopr.vidsopr
and katsopr.cstepdoc == stepdoc.nrec
and stepdoc.cbasedoc ==basedoc.nrec
and katsopr.nrec /== ttndoc.cdoc
and cokatsopr == ttndoc.wtable
and date(01,01,2009)<<= TTNDOC.DPUNPBEG (noindex)
and date(01,02,2009) >>= TTNDOC.DPUNPBEG(noindex)
and ttndoc.cpunktr == marpunkt.nrec
and basedoc.cnote /== katnotes.nrec
and (2 = katnotes.status) // - в basedoc вроде есть свое поле - лучше по нему.
))
;
вообще такие условия ниже 3 уровня лучше не спускать
в идеале надо фильтровать по датам по табле 1 уровня - в данном случае по katsopr. Ну хотя бы помочь - явно доставка не может намного отставать от даты отгрузки в накладной.
Добавлено: 30 окт 2009, 12:10
Masygreen
а есть ли разница ?
Код: Выделить всё
and date(01,01,2009)<<= TTNDOC.DPUNPBEG (noindex)
and date(01,02,2009) >>= TTNDOC.DPUNPBEG(noindex)
и
Код: Выделить всё
))
and date(01,01,2009)<= TTNDOC.DPUNPBEG
and date(01,02,2009) >= TTNDOC.DPUNPBEG
там же все равно без индекса?? и кто муже кто знает как интерпретатор переводит этот запрос очень может быть что все условия noindex обрабатываются последними ???
Добавлено: 30 окт 2009, 12:16
edward_K
мой опыт показывает, что разница есть. Когада имеешь под рукой базюку в 60 гигов на дохлом сервере приходится подкручивать каждую запятую. Да и вроде обсуждалось уже на форуме. У меня ощущение, что когда внизу пишешь, то данные все топают на локал, а потом уже фильтруются, а когда с noindex они все таки фильтруются на сервере. Да и дело не в этом главное - надо поднять фильтруемую таблу хотя бы на 2 уровень, а таблу на 1 существенно ограничить - тогда и на больших объемах будет работать.