SQL-сервер с подсказкой (NOLOCK)

Может кто-нибудь объяснить, если использование с (NOLOCK) в запросах SQL на самом деле заставляет их работать быстрее? И если так, то почему?

2 ответа

Решение

С помощью NOLOCK не ускоряет ваш индивидуальный запрос как таковой. Но это позволяет другим запросам обращаться к той же таблице, что сокращает время, затрачиваемое из-за блокировок.

Это особенно полезно, когда один клиент выбрал обновление таблицы, и для завершения транзакции требуется значительное время. Используя NOLOCK команда, другие клиенты могут выполнять запросы, которые пытаются получить доступ к таблице. Им не нужно ждать завершения обновления, поэтому другие транзакции могут быть завершены, даже если одна транзакция еще выполняется.

Это не означает, что производительность одного запроса повышается с помощью NOLOCK команда. Это просто повышает общую производительность, когда задействованы несколько клиентов или выполняется пакетное выполнение.

Тем не менее, вы должны знать о риске грязного чтения при использовании NOLOCK, Вот хорошая статья, объясняющая, почему вы должны вообще избегать использования NOLOCK,

WITH (NOLOCK) ( источник):

Не используйте общие блокировки и не выполняйте эксклюзивные блокировки. Когда эта опция действует, можно прочитать незафиксированную транзакцию или набор страниц, откат которых выполнен в середине чтения. Грязные чтения возможны. Применяется только к оператору SELECT.

Другие вопросы по тегам