Реального секретного сверхбыстрого решения для обновления столбца VARCHAR не существует. Это будет относительно медленно, несмотря ни на что, но есть вещи, которые вы можете сделать, чтобы уменьшить боль.
Убедитесь, что у вас есть правильные покрытые индексы для всех ваших таблиц.
ПРИМЕЧАНИЕ. Я предполагаю, что в вашем коде есть опечатка - «Обновить fopty» должно читаться как «Обновить opty», правильно?
В случае таблицы optyfact (opty alias) у вас должен быть индекс для столбцов optyid
и atukey
, который включает metrickey
.
Для других таблиц поместите все столбцы в индекс - не беспокойтесь о включении (покрытии) любых других столбцов.
Как только вы все это настроите, пройдите анализатор запросов, чтобы убедиться, что вы выполняете INDEX SEEKs для всех таблиц, в противном случае он будет работать в течение ДЛИТЕЛЬНОГО времени, как вы указали.
Кроме того, убедитесь, что вы объединяетесь в узких колоннах. INT хорошие, VARCHAR плохие.
Последнее: убедитесь, что столбец metrickey
НЕ является частью вашего кластеризованного индекса, иначе таблица будет продолжать реорганизовываться во время обновления.
Это все, что я получил. Удачи!