Страница 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 существенно ограничить - тогда и на больших объемах будет работать.