https://dba.stackexchange.com/questions/127158/how-to-get-sql-insert-and-or-update-to-not-lock-entire-table-on-ms-sql-server
ольно плохо знаком с замками и подсказками.
У меня есть таблица с очень частымSELECT
а такжеINSERT
операции. В таблице 11 миллионов записей.
Я добавил новый столбец, и мне нужно скопировать данные из существующего столбца в той же таблице в новый столбец.
Я планирую использоватьROWLOCK
подсказка, чтобы избежать эскалации блокировок до блокировок уровня таблицы и блокирования всех других операций в таблице. Например:
UPDATE
SomeTable WITH (ROWLOCK)
SET
NewColumn = OldColumn
Вопросы:
Был быNOLOCK
вместоROWLOCK
? Обратите внимание, что после вставки записей в таблицу значение для OldColumn не изменяется, поэтомуNOLOCK
не вызывает грязного чтения.Есть лиNOLOCK
даже имеет смысл в этом случае, потому что SQL Server должен был бы в любом случае получить блокировки обновления дляUPDATE
.Есть ли лучший способ добиться этого?Я знаю, что подсказок следует избегать, и SQL Server обычно делает более разумные решения, но я не хочу блокировать таблицу во время этого обновления.