В инструкции UPDATE учитывается ли подсказка NOLOCK в предложении FROM? - PullRequest
4 голосов
/ 01 ноября 2010

С учетом следующего оператора обновления:

UPDATE @TableVariable
SET city = T2.city
FROM @TableVariable TV
INNER JOIN dbo.TABLE_1 T1 WITH (NOLOCK)
    ON  (TV.customer_id = T1.customer_id)
INNER JOIN dbo.TABLE_2 T2 WITH (NOLOCK)
    ON  (T1.address_id = T2.address_id)

Будут ли учитываться подсказки (NOLOCK) для TABLE_1 и TABLE_2?

Ответы [ 2 ]

8 голосов
/ 01 ноября 2010

Будут ли выполнены (NOLOCK) подсказки для TABLE_1 и TABLE_2?

Да, будут.

Обратите внимание, что в общем случае это поведение очень неправильно и если вы считаете, что вам это действительно нужно, скорее всего, вам следует изменить дизайн базы данных и / или приложения.

Какова цель подсказок NOLOCK?Почему вы хотите обновить переменную таблицы грязными данными?

1 голос
/ 03 ноября 2010

Намек NoLock практически никоим образом не увеличивает производительность сервера.Однако подсказка (NOLOCK) может использоваться безопасно, если доступ к данным либо гарантированно не изменится в тот момент (например, после отправки части данных в БД она останется неизменной, либо вы знаете, что текущая часть данных не изменитсядругими пользователями) или, если нет необходимости брать старые данные или новые данные (например, некоторые данные часто изменяются и в любом случае нет необходимости сохранять именно последнюю).В противном случае вы можете получить расхождение данных в разных таблицах ...

...