как бык корову по скорости при вставке порядка от 100 и больше записей одновременно - и так известно.
                  
                  
                  А когда после вставки нужно обновить поле записям эдак в количестве несколько тысяч после вставки сотен булк инсёртом. По некоему критерию. Ну то я упрощаю, но в общем так. Как это делается через ORM? Грузишь себе эти несколько тысяч связанных записей, целиком. Исправляешь значения в них. И делаешь сохранение. И они обновлённые целиком летят в SQL, даже и с отключенным трекингом.
                  
                  
                  Как это делается хранимкой?
                  
                  
                  
                  
                  
                  Схематично:
                  
                  
                  UPDATE x
                  
                  
                  SET column1 = ... 
                  
                  
                  FROM table1 AS x
                  
                  
                  INNER JOIN table2 ON ...
                  
                  
                  WHERE table2 ...
                  
                  
                  
                  
                  
                  То есть все джойны и фильтры в одном запросе с апдейтом и обновляется ровно одна колонка, вместо пересылки туда-сюда всей сущности, причём при обновлении всей сущности (даже если изменяется одна колонка) обновляется хренова гора навешенных индексов. А при апдейте через SQL таким запросом - обновляются только индексы, которые связаны с изменяемым столбцом, и всё.
                  
                  
                  
                  
                  
                  Результат, как говорится, налицо. Ускорение в десятки раз.
                  
                  
                
для EF есть экстеншены, которые позволяют делать BulkUpdate не выкачивая ничего, насколько я знаю. Вполне возможно что это дело ускорит от изначальных 1900 секунд до чего-нибудь более-менее приемлимого
Какие-то очевидные вещи написал. Все знают что в еф нет балк инсерта и что в этом он проигрывает.
Обсуждают сегодня