Вынос обработки в хранимую процедуру и не должен был помочь, так как у вас много маленьких запросов к базе, а SQL сервер читает данные страницами по 8 кб. Так что реально объем прочитанных данных очень велик. (Я уже не говрю про время поиска).
Самое надежное в данном случае попробовать изменить алгоритм расчета, так чтобы используемые записи кешировались вами. Например в map-е или во временной таблице.
Как вариант использования map посмотрите
класс расчета себестоимости InventCostItemDim
методы
load()
loadTrans()
|