Уровень NOLOCK и уровень изоляции транзакций

В чем разница между использованием "УРОВЕНЬ ИЗОЛЯЦИИ УСТАНОВКИ ОПАСНОСТИ, ЧТОБЫ ПРОЧИТАТЬ НЕ РАЗРЕШЕНО" и NOLOCK? Лучше другого?

Ответ 1

Это одно и то же, просто по-разному. NOLOCK размещается на основе таблицы и SET Transaction... может быть помещен как блок.

Ответ 2

NOLOCK - это подсказка запроса и как таковая применяется только к таблице спецификаций в запросе, в котором она указана.

Установка уровня изоляции транзакции применяется ко всему запущенному из-за этого кода в текущем соединении или до тех пор, пока он не будет явно изменен.

Чтобы прояснить, функционально уровень изоляции на рабочем месте тот же, но охват, который покрыт, может и не быть.

Ответ 3

Посмотрите ответ с нескольких часов назад на вопрос SQL Server SELECT, вызывающий блокировку.

Цитата Ремус Русану:

SELECT может блокировать обновления. Правильно спроектированная модель данных и запрос вызовут минимальную блокировку и не будут проблемой. "Обычный" с подсказкой NOLOCK - почти всегда неправильный ответ. Правильный ответ - настроить ваш запрос, чтобы он не просматривал огромные таблицы.

Если запрос не поддаётся проверке, вы должны сначала рассмотреть уровень SNAPSHOT ISOLATION, во-вторых, вы должны рассмотреть возможность использования DATABASE SNAPSHOTS, а последний параметр должен быть DIRTY READS (и лучше изменить уровень изоляции, а не использовать NOLOCK HINT). Обратите внимание, что грязные чтения, как ясно указано в названии, возвращают несогласованные данные (например, ваш общий лист может быть несбалансированным).

Другие ответы также могут помочь вам.

Ответ 4

Они имеют одинаковый эффект, только один используется как подсказка блокировки (nolock), а другой используется для области подключения.

Будьте осторожны с любым из этих - грязные чтения могут быть очень плохими в зависимости от вашего приложения. Чтение одной и той же записи дважды или отсутствие записи из-за перемещения страницы может быть очень запутанной для пользователей...