Почему так медленно работает?
Сделала запрос по поиску МЦ в ДО
select basedoc.NODOC,basedoc.DDOC,katmc.barkod
from basedoc,spstep,stepdoc
where
((
stepdoc.cbasedoc==basedoc.nrec
and
spstep.CSTEPDOC==stepdoc.nrec
and
spstep.CMCUSL==katmc.nrec
))
and
katmc.barkod='4303249000145'
;
Отработало, решила сделать то же самое на VIP, чтобы вводить МЦ , а не менять ее в запросе. Работает в разы медленнее. Что я делаю не так?
nterface Bkod 'Поискать употребление МЦ в ДО' AlwaysReturn;
Var Bkod: string;
create view
as select BaseDoc.*
from basedoc,spstep,stepdoc
WHere
((
stepdoc.cbasedoc==basedoc.nrec
and
spstep.CSTEPDOC==stepdoc.nrec
and
spstep.CMCUSL==katmc.nrec
))
and
(katmc.barkod=Bkod)
;
Parameters
Bkod
browse BR1 ;
show at (,10,,);
fields
Basedoc.NoDOC 'Номер документа':[10], Protect;
Basedoc.DDOC 'Дата документа':[10], Protect;
Katmc.Barkod 'Баркод':[15], Protect;
end;
handleEvent
cminit: {
message (bkod,cmok);
}
end; //HandleEvent
!end;
end.
Почему так медленно работает запрос в vipe?
Модераторы: m0p3e, edward_K, Модераторы
))
and
(katmc.barkod=Bkod)
;
Это по сути безиндексная фильтрация логической таблицы - сначала отбираются ВСЕ stepdoc (она в данном случае главная), затем отбираются ВСЕ записи SpStep (и она тоже главная в данном случае),
затем в памяти начинается фильтрация по определенной МЦ.
1. что Вам мешает посмотреть наличие в KatMc необходимого индекса
KATMC07 = BARKOD+NAME
2. что Вам мешает посмотреть наличие в SpStep необходимого индекса
SPSTEP05 = PRMC+CMCUSL
И более корректно написать запрос
and
(katmc.barkod=Bkod)
;
Это по сути безиндексная фильтрация логической таблицы - сначала отбираются ВСЕ stepdoc (она в данном случае главная), затем отбираются ВСЕ записи SpStep (и она тоже главная в данном случае),
затем в памяти начинается фильтрация по определенной МЦ.
1. что Вам мешает посмотреть наличие в KatMc необходимого индекса
KATMC07 = BARKOD+NAME
2. что Вам мешает посмотреть наличие в SpStep необходимого индекса
SPSTEP05 = PRMC+CMCUSL
И более корректно написать запрос
Код: Выделить всё
Create View
As
Select
BaseDoc.*
From
BaseDoc
, SpStep
, StepDoc
, KatMc
Where
((
Bkod == KatMc.BarKod
And Word(1) == SpStep.PrMc //Признак МЦ или Услуги
And KatMc.Nrec == SpStep.cMcUsl
And SpStep.cStepDoc == StepDoc.Nrec
And StepDoc.cBaseDoc == BaseDoc.Nrec
))
;
Однако есть небольшая ошибка в инструментарии, которая решится с выходом Атл. 5.4.23.0
Тогда в броузе вы увидите всю таблицу.
Код: Выделить всё
Browse BR1 ;
show at (,10,,);
viewTable;
fields
Basedoc.NoDOC 'Номер документа':[10], Protect;
Basedoc.DDOC 'Дата документа':[10], Protect;
Katmc.Barkod 'Баркод':[15], Protect;
end;