У меня есть SP, написанный на C #, который вычисляет около 2 миллионов строк. Расчет занимает около 3 минут. Для каждой строки результат генерируется в виде трех чисел.
Эти результаты вставляются во временную таблицу, которая позже как-то обрабатывается.
Результаты добавляются кусками, а вставка занимает иногда более 200 минут (да, более 3 часов!). Иногда это занимает «всего» 50 минут.
Я изменил его так, что результаты сохраняются в памяти до конца, а затем целые 2 миллиона сбрасываются в один цикл внутри одной транзакции. Тем не менее - это занимает около 20 минут.
Аналогичный цикл, написанный на SQL с транзакцией begin / commit, занимает менее 30 секунд.
У кого-нибудь есть идея, в чем проблема?
Обработка 2 миллионов (так что их выбор и т. Д.) Занимает 3 минуты, а результаты в лучшее решение - 20 минут.
ОБНОВЛЕНИЕ: эта таблица имеет один кластеризованный индекс в столбце идентификаторов (чтобы гарантировать, что строки физически добавляются в конце), никаких триггеров, никаких других индексов, никакой другой процесс не обращается к нему.