Я отмечу пару вещей здесь, действительно ли EndTimeKey является ключевым? Если это так, у него может быть индекс на нем, в этом случае скорость (или его отсутствие) будет обновлять индекс, в то время как также выполняется фактическое обновление данных, решение удаляет индекс, запускает обновление, повторно применяет индекс. *
Другой проблемой может быть транзакционный характер Sql - когда вы делаете это обновление, оно регистрирует каждое изменение, поэтому может откатываться в случае сбоя. Это обновление выглядит довольно простым, поэтому вы можете применить его в пакетном режиме, например
update TableToUpdate setEndTimeKey = DATE_NOfrom Dates where EndTime = DATE
where TableToUpdateId between 1 and 100000
Это разделит ваше обновление на фрагменты с управляемым размером - по крайней мере, вы поймете, сколько времени займет каждый блок.
Другой вариант - поместить индекс в столбец EndTime, возможно, ему придется выполнить полное сканирование таблицы.
Реальный ответ - посмотреть на генерируемый план запроса. Как вы можете видеть, есть много причин, почему запрос может выполняться медленно - это всего лишь несколько быстрых проверок.