Страница 1 из 1

подскажите, что нужно, чтобы быстрее работало

Добавлено: 01 июн 2010, 12:08
sildae
Нужно разбить приход по vidsopr. 502, 600,506 и т.д.
для 502 сделала. А для остальных vidsopr нужно свое view-представление?

Сделала строку 502=katsopr.vidsopr с переменной величиной. Стало работать значительно дольше.

.create view prixod1
from katsopr,spsopr,sporder
where
((
katsopr.nrec==spsopr.csopr
and
spsopr.CMCUSL==katmc.nrec
and
katsopr.CPODRTO==katpodr.nrec
))
and
katpodr.nrec=Sklad_nrec
and
502=katsopr.vidsopr
and
katsopr.dsopr>=begDat
and
katsopr.dsopr<=endDat
and
katmc.nrec=MC_nrec
;

Добавлено: 01 июн 2010, 12:38
RAJAH
Перечисляете в секции FROM таблицу sporder, а в WHERE никак не связываете - конечно, будет долго. А KATMC, наоборот, есть в связях, но в FROM не указана. Могу такой вариант предложить:

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

((
begDat          <<= katsopr.dopr and
endDat          >>= katsopr.dopr and
katsopr.nrec    /== spsopr.csopr and (502 = katsopr.vidsopr or 506 = katsopr.vidsopr or 600 = katsopr.vidsopr) and
spsopr.CMCUSL   /== katmc.nrec and (MC_nrec = katmc.nrec) and
katsopr.CPODRTO /== katpodr.nrec and (Sklad_nrec = katpodr.nrec)
));
Жёсткие связи иногда полезны для избавления от лишних записей.

Добавлено: 01 июн 2010, 12:39
Yuri
Попоробуйте так:
.create view prixod1 from katsopr, spsopr, sporder
where (( Word(502)==katsopr.vidsopr and begDat <<= katsopr.dsopr and endDat >>=katsopr.dsopr and Sklad_nrec == katsopr.CPODRTO(noindex)
and katsopr.nrec == spsopr.csopr and spsopr.CMCUSL == katmc.nrec and MC_nrec == katmc.nrec(noindex) ));

Добавлено: 01 июн 2010, 13:17
sildae
Спасибо. Действительно, все стало работать гораздо быстрее.

Добавлено: 01 июн 2010, 13:32
sildae
.create view prixod1
from katsopr, spsopr
where ((
begDat <<= katsopr.dsopr
and endDat >>=katsopr.dsopr
and Sklad_nrec == katsopr.CPODRTO(noindex)
and katsopr.nrec == spsopr.csopr
and MC_nrec==spsopr.CMCUSL
and word(502)==katsopr.vidsopr
))
;
Получилось так. Но если я хочу добавить or word(600)==katsopr.vidsopr, то конструкция выдает ошибку настройки логических таблиц.

Добавлено: 01 июн 2010, 13:46
Алексей
сделайте

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

....
and ( 502=katsopr.vidsopr OR 600=katsopr.vidsopr)
я обычно объявляю переменную myVidSopr и подставляя туда разные значения пробегаю просто два раза по катсопру.

Добавлено: 01 июн 2010, 14:00
edward_K
and myVidSopr==katsopr.vidsopr
и в цикле for перебирайте myVidSopr

Добавлено: 02 июн 2010, 13:47
Yuri
Только не забудьте о том, что индекс по таблице KatSopr - vidsopr+dsopr (в вашем случае). В такой последовательности и пишите условия.