У нас есть цикл для обновления таблицы с несколькими миллионами строк кусками.
В настоящее время мы тестируем блоки размером 50 КБ, но некоторые итерации фактически обновляют немного меньше (например, 49983).
Это общая структура цикла, который мы используем:
WHILE @Row<=@loop
BEGIN
update top (50000) MR
set mr.Id_P = mp.PKey
from DWH.[MResults] MR join DWH.MappingP MP
on MR.P_Root=MP.Id_Root and MR.P_Ext=MP.Id_Ext
and MR.id_p is null
set @Row=@Row+1
END
Разве каждая итерация не должна затрагивать 50 тыс. Строк? Чем это вызвано?
Спасибо!
Я думаю, это может произойти, если ваш join
имеет несколько совпадений в обновляемой таблице.
@GordonLinoff, почти уверен, что мы встречаем несколько совпадений в этом запросе. Вы можете объяснить, как это влияет на результат? Спасибо!
@Gidil. . . Для обновления выбрано 500 000 результатов от FROM
, но они представляют менее 500 000 строк.
Не могли бы вы задать свой вопрос редактировать и добавить SQL-сервер, который вы используете?