Из всего, что я вижу, не похоже, что ваши проблемы связаны с индексами.
Ключ, кажется, в том, что ваше поле nvarchar (max) содержит "много" данных. Подумайте о том, что должен сделать SQL для выполнения этого обновления.
Поскольку обновляемый столбец, вероятно, содержит более 8000 символов, он сохраняется вне страницы, что требует дополнительных усилий при чтении этого столбца, если он не равен NULL.
Когда вы запускаете пакет из 50000 обновлений, SQL должен поместить это в неявную транзакцию, чтобы сделать возможным откат в случае каких-либо проблем. Для отката необходимо сохранить исходное значение столбца в журнале транзакций.
Предполагая (для простоты), что каждый столбец содержит в среднем 10 000 байтов данных, это означает, что 50000 строк будут содержать около 500 МБ данных, которые должны храниться временно (в простом режиме восстановления) или постоянно (в режиме полного восстановления) ).
Невозможно отключить журналы, так как это нарушит целостность базы данных.
Я провел быстрый тест на медленном рабочем столе своей собаки, и запуск пакетов из даже 10 000 стал слишком медленным, но уменьшение размера до 1000 строк, что подразумевает временный размер журнала около 10 МБ, сработало просто замечательно.
Я загрузил таблицу с 350 000 строк и отметил 50 000 из них для обновления. Это завершается примерно за 4 минуты, и, поскольку он линейно масштабируется, вы сможете обновить целые 5 миллионов строк на медленном рабочем столе моей собаки примерно за 6 часов на моем 1-процессорном 2-гигабайтном рабочем столе, так что я бы ожидал чего-то гораздо лучшего на вашем мощном сервере. по SAN или что-то.
Возможно, вы захотите запустить свой оператор обновления как выбор, выбрав только первичный ключ и большой столбец nvarchar, и убедитесь, что он выполняется так быстро, как вы ожидаете.
Конечно, узким местом могут быть другие пользователи, блокирующие вещи или конфликты в вашем хранилище или памяти на сервере, но, поскольку вы не упомянули других пользователей, я предполагаю, что для этого у вас есть БД в однопользовательском режиме.
В качестве оптимизации вы должны убедиться, что журналы транзакций находятся на другой физической группе дисков / дисков, чем данные, чтобы минимизировать время поиска.