SQL-сервер с подсказкой (NOLOCK)
Может кто-нибудь объяснить, если использование с (NOLOCK) в запросах SQL на самом деле заставляет их работать быстрее? И если так, то почему?
2 ответа
С помощью NOLOCK
не ускоряет ваш индивидуальный запрос как таковой. Но это позволяет другим запросам обращаться к той же таблице, что сокращает время, затрачиваемое из-за блокировок.
Это особенно полезно, когда один клиент выбрал обновление таблицы, и для завершения транзакции требуется значительное время. Используя NOLOCK
команда, другие клиенты могут выполнять запросы, которые пытаются получить доступ к таблице. Им не нужно ждать завершения обновления, поэтому другие транзакции могут быть завершены, даже если одна транзакция еще выполняется.
Это не означает, что производительность одного запроса повышается с помощью NOLOCK
команда. Это просто повышает общую производительность, когда задействованы несколько клиентов или выполняется пакетное выполнение.
Тем не менее, вы должны знать о риске грязного чтения при использовании NOLOCK
, Вот хорошая статья, объясняющая, почему вы должны вообще избегать использования NOLOCK
,
WITH (NOLOCK) ( источник):
Не используйте общие блокировки и не выполняйте эксклюзивные блокировки. Когда эта опция действует, можно прочитать незафиксированную транзакцию или набор страниц, откат которых выполнен в середине чтения. Грязные чтения возможны. Применяется только к оператору SELECT.