Цитата:
Сообщение от
gl00mie
Если она исчисляется не миллионами, то лучше, вероятно, сделать выгрузку, перебирающую все номенклатуры (с определенными фильтрами, скажем, по бренду), а уже внутри этого перебора делающую проверку на остатки по определенному складу, на соответствие выгружаемых цен определенным критериями, etc.
Теоретически все верно, но практически что-то не очень.
Запрос:
X++:
while select inventTable
where ...
{
}
Где "..." набор некоторых ограничений. В итоге цикл выполняется 66542 раза за 32 сек.
Если в цикл добавить запрос на выборку запасов в наличии
X++:
select sum(AvailPhysical) from inventSum
join maxof(recid) from InventDim
where inventSum.InventDimId == inventDim.inventDimId && inventSum.ItemId == inventTable.ItemId && inventSum.Closed == NoYes::No && inventDim.InventLocationId == 'склад'
Запрос выполняется очень быстро. Разве что немного мешает maxof(recid), но без него на сервер уходит запрос всех полей из InventDim, что неверно. Подставить вместо recId фиктивное поле TableId не получается, хотя помнится где-то об этом на форуме писалось.
Так вот - такой цикл выполняется очень долго. Честно ждал полчаса, но безрезультатно. "Мега-запрос" хотя и имеет массу недостатков, но выполняется максимум за 3 минуты.
Вопрос что здесь не так, почему такое расхождение теории с практикой?