Таблица пакетного обновления с 2 миллионами строк - PullRequest
1 голос
/ 09 сентября 2011

Привет всем. У меня есть интересная задача обновить один столбец в таблице, в которой примерно 2 миллиона строк.Я пытался сделать это с помощью MVC Entity Framework, однако я сталкиваюсь с «Исключениями из нехватки памяти», и мне просто интересно, есть ли другой способ.

Интересно то, что это не просто обновление.Процедура должна прочитать столбец TelephoneNumber, уже находящийся в таблице, например, это может быть 014812001.Затем необходимо рассчитать оценку для этого числа на основе числа вхождений больше 1. Поэтому, например, используя вышеуказанное число, мы получили бы 6, так как у нас есть 3 x 1 и 3 x 0, что дает в общей сложности 6.

Как только эта оценка была рассчитана, это число должно быть вставлено в столбец в текущей строке для обработки, поэтому в нашем случае строка с TelephoneNumber = 014812001.

Возможно ли это с помощью TSQL или лучше придерживаться моего подхода Entity Framework?

1 Ответ

2 голосов
/ 09 сентября 2011

Для такого массового обновления я бы всегда рекомендовал бы делать это на самом сервере - на самом деле нет смысла перетаскивать 2 миллиона строк, обновлять один столбец, а затем отправлять их обратно на сервереще раз .....

Я думаю, основываясь на вашем описании, должно быть довольно просто создать небольшую пользовательскую функцию T-SQL, которая будет вычислять эту оценку.Получив это, вы можете выполнить один оператор T-SQL:

UPDATE dbo.YourTable
SET Score = dbo.fnCalculateScore(TelephoneNumber)
WHERE .... (whatever condition you might have) .....

Это должно быть на несколько порядков быстрее, чем с вашим подходом Entity Framework ....

...