Не обнаружено проблем с блокировкой таблицы.Медленный UPDATE на SQL Server, даже если обновления не обновляются
У меня есть инструкция по обновлению, аналогичная этому.
UPDATE table1
SET table1.col1 = table2.col2
FROM table1,table2
WHERE table1.id = table2.id
Это берет навсегда, даже в случае Whee нет записей для обновления
работает запрос
SELECT *
FROM table1,table2
WHERE table1.id = table2.id
мгновенно.
РЕШЕНИЕ НАЙДЕНО: для этого я включил «Включить фактический план выполнения», как было предложено, и рекомендовал 3 индекса, которые у меня не были, и теперь выполняет всю хранимую процедуру, которая составляет 190 операторов SQL, работающих на таблицах с 16 миллионами строк менее чем за 1 минуту. Грейсиас тому, кто это предложил.
Это не повлияет на производительность, но синтаксис 'JOIN' является наихудшим. Рассмотрим 'FROM table1 JOIN table2 ON table1.id = table2.id' вместо этого. Он сохраняет логику 'JOIN' отдельно от логики' WHERE'. – Yuck
В SSMS попробуйте параметр «включить фактический план выполнения», чтобы проверить, что делает SQL-сервер. – Blorgbeard
Мне нравятся соединения implict для INNER Joins, логически имеет смысл для меня, и в моих исследованиях говорится, что планы выполнения идентичны для разных синтаксисов. Эта проблема подтверждается в тоннах баз данных, работающих на одном и том же программном обеспечении, даже в однопользовательском режиме. Вероятно, я хотел бы отметить, что таблица1 и таблица2 содержат около 16 миллионов записей. –