Страница 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 ))