Почему я должен или не должен использовать грязное чтение:
set transaction isolation level read uncommitted
в SQL Server?
@ A-K Первая ссылка теперь 404


Обычно, когда вам нужно делать большие (или частые) запросы к занятым таблицам, где зафиксированное чтение может быть заблокировано блокировками от незавершенных транзакций, но ТОЛЬКО когда вы можете жить с неточными данными.
Например, на игровом веб-сайте, над которым я недавно работал, была сводная информация о некоторых статистических данных о последних играх, все это было основано на грязном чтении, для нас было важнее включить, а затем исключить транзакционные данные, которые еще не зафиксированы ( в любом случае мы знали, что немногие транзакции, если вообще будут, будут отменены), мы чувствовали, что в среднем данные будут более точными.
используйте его, если хотите сразу вернуть данные, и это не так важно, если они правильные
не используйте, если важна правильность данных или если вы выполняете с ними обновления
Также обратите внимание на изоляцию моментальных снимков, которая была введена в sql server 2005.
От MSDN:
When this option is set, it is possible to read uncommitted or dirty data; values in the data can be changed and rows can appear or disappear in the data set before the end of the transaction.
Проще говоря, когда вы используете этот уровень изоляции и выполняете несколько запросов к активной таблице в рамках одной транзакции, нет гарантии, что информация, возвращаемая вам в разных частях транзакции, останется прежней. Вы можете запросить одни и те же данные дважды в рамках одной транзакции и получить разные результаты (это может произойти в том случае, если другой пользователь обновлял одни и те же данные в середине вашей транзакции). Очевидно, это может иметь серьезные последствия для частей вашего приложения, которые полагаются на целостность данных.
Дело в том, что когда вы хотите прочитать данные перед фиксацией, мы можем сделать это с помощью установленного уровня изоляции транзакции, чтение незафиксировано, данные могут или не могут измениться.
Мы можем прочитать данные, используя запрос:
Select * from table_name with(nolock)
Это применимо только для чтения незафиксированного уровня изоляции.
Будьте осторожны, когда вы ссылаетесь на сторонний сайт, так как это будет спам для переполнения стека. Относитесь: Как не быть спамером.
Подробный анализ здесь: Выбирает в READ COMMITTED и REPEATABLE READ может возвращать неверные результаты и здесь: Случай искаженных итогов