Нужна помощь SQL - Разбор через 2 записи Lac + - PullRequest
1 голос
/ 01 августа 2011

У меня есть таблица Customer с 200.000+ записями, которые я должен пройти по циклу, проверить условие (для определенного столбца) и обновить столбец «IsPremiumUser» до TRUE.Каков наилучший способ сделать это?

Я вижу, что могу достичь этого двумя способами

  1. Использовать объединение и обновление
  2. Прокручивать каждую запись и обновлятьit.

Я использую SQL Server2008.

Обновление: я имел в виду не циклический просмотр записей с использованием C # или Java, а в самом SQL.Я ищу способы сократить время выполнения, поскольку существует более 200 000 записей.Использование обновления + соединения

Обновление 2 занимает 20 минут. Ниже приведены запросы.

MERGE pref.personpreference AS T
USING (SELECT PR.PersonID,PR.PersonroleId from personrole PR ) as S
ON (T.PersonRoleID = S.PersonRoleID)
WHEN MATCHED THEN 
    UPDATE SET T.SDRPERSONID = S.PersonId;



UPDATE PP 
SET PP.SDRPersonID = PR.PersonID
FROM PREF.PersonPreference PP JOIN PersonRole PR
ON PP.PersonRoleID = PR.PersonRoleID

Примечания. Слияние занимает 17 минут, а обновление - 20 минут.Но я вижу, что количество измененных записей различается примерно на 1000 между этими утверждениями.

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Если столбец находится в той же таблице, используйте оператор UPDATE с условием WHERE, в котором вы будете определять строки для обновления.

UPDATE Customers
SET isPremiumUser = 1 -- true
WHERE some_column operator some_condition 

например,

WHERE friend_members > 10
0 голосов
/ 01 августа 2011

Всегда используйте команды базы данных вместо того, чтобы проходить через кучу записей и выполнять операторы UPDATE каждый раз, когда строка соответствует вашему условию. Это будет намного, намного быстрее и только 2-3 строки SQL вместо 10-20 строк java / c # / what-code.

Взгляните на запрос на обновление SQL с использованием соединений для примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...