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 обычно делает более разумные решения, но я не хочу блокировать таблицу во время этого обновления.

Ответы на вопрос(3)

Ваш ответ на вопрос