Если одна и та же таблица присутствует в запросе несколько раз, нужно ли добавлять WITH (NOLOCK) каждый раз? - PullRequest
0 голосов
/ 10 марта 2020

Если одна и та же таблица присутствует в запросе несколько раз, нужно ли добавлять WITH (NOLOCK) каждый раз? Допустим, у нас есть огромный запрос, на который одна и та же таблица может ссылаться несколько раз, тогда нужно ли нам добавлять WITH (NOLOCK) каждый раз, или мы можем добавить его один раз, и SQL будет гарантировать, что каждый его экземпляр будет прочитан с использованием WITH (NOLOCK) намекают.

1 Ответ

2 голосов
/ 10 марта 2020

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

Особенно при использовании запроса, который имеет много ссылок на таблицы, вместо WITH(NOLOCK) намекает на все из них, просто установите уровень изоляции транзакции вашей сессии . Добавьте строку над запросом:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

Функционально это то же самое, что добавить подсказку к каждой таблице в запросе, и вы можете быть уверены, что не пропустили ни одной.

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

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; 

В вашем независимом исследовании вы узнаете, почему это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...