В чем разница между использованием "УРОВЕНЬ ИЗОЛЯЦИИ УСТАНОВКИ ОПАСНОСТИ, ЧТОБЫ ПРОЧИТАТЬ НЕ РАЗРЕШЕНО" и NOLOCK? Лучше другого?
Уровень NOLOCK и уровень изоляции транзакций
Ответ 1
Это одно и то же, просто по-разному. NOLOCK размещается на основе таблицы и SET Transaction...
может быть помещен как блок.
Ответ 2
NOLOCK - это подсказка запроса и как таковая применяется только к таблице спецификаций в запросе, в котором она указана.
Установка уровня изоляции транзакции применяется ко всему запущенному из-за этого кода в текущем соединении или до тех пор, пока он не будет явно изменен.
Чтобы прояснить, функционально уровень изоляции на рабочем месте тот же, но охват, который покрыт, может и не быть.
Ответ 3
Посмотрите ответ с нескольких часов назад на вопрос SQL Server SELECT, вызывающий блокировку.
Цитата Ремус Русану:
SELECT может блокировать обновления. Правильно спроектированная модель данных и запрос вызовут минимальную блокировку и не будут проблемой. "Обычный" с подсказкой NOLOCK - почти всегда неправильный ответ. Правильный ответ - настроить ваш запрос, чтобы он не просматривал огромные таблицы.
Если запрос не поддаётся проверке, вы должны сначала рассмотреть уровень SNAPSHOT ISOLATION, во-вторых, вы должны рассмотреть возможность использования DATABASE SNAPSHOTS, а последний параметр должен быть DIRTY READS (и лучше изменить уровень изоляции, а не использовать NOLOCK HINT). Обратите внимание, что грязные чтения, как ясно указано в названии, возвращают несогласованные данные (например, ваш общий лист может быть несбалансированным).
Другие ответы также могут помочь вам.
Ответ 4
Они имеют одинаковый эффект, только один используется как подсказка блокировки (nolock), а другой используется для области подключения.
Будьте осторожны с любым из этих - грязные чтения могут быть очень плохими в зависимости от вашего приложения. Чтение одной и той же записи дважды или отсутствие записи из-за перемещения страницы может быть очень запутанной для пользователей...