Обратите внимание, что вы можете указать nolock для каждой таблицы.
Обычно я использовал nolock в сложных запросах SELECT, но только для небольших справочных таблиц, которые почти никогда не менялись, и для данных только для отображения. Вам известны таблицы, в которых перечислены цены за текущее полугодие, или просмотры идентификаторов в строках и т. Д. Материал, который меняется только при серьезных обновлениях, после которых серверы обычно все равно обычно перезагружаются.
Это значительно улучшило производительность, уменьшило вероятность взаимоблокировки в самые загруженные времена, и что еще более важно, это было действительно заметно в худшие моменты для запросов, которые касались большого количества таблиц (что логично, они должны получать меньше блокировок, и эти таблицы часто используются почти везде, часто уменьшая с 7-8 до 4 таблиц, которые необходимо заблокировать)
Но будьте очень осторожны при добавлении, не торопитесь и не делайте это регулярно. При правильном использовании он не причинит вреда, но при ненадлежащем использовании будет причинять ужас.
Не используйте его для критически важных вещей, вычислений и т. Д., Потому что он станет непоследовательным, что-либо, что рано или поздно приведет к записи.
Другой такой оптимизацией является ROWLOCK, которая блокируется только на уровне строки. Это в основном полезно при обновлении (или удалении) таблиц, где строки не связаны друг с другом, например, таблицы, в которые вы помещаете только записи журнала (и порядок их добавления не имеет значения). Если у вас есть схема, в которой где-то в конце транзакции в какую-либо таблицу записывается запись журнала, это тоже может значительно ускориться.
Если ваша база данных имеет относительно низкий процент записей, это может не стоить этого. У меня было отношение чтения: записи менее 2: 1.
Некоторые URL-адреса, которые я сохранил, работая над этим:
http://www.developerfusion.com/article/1688/sql-server-locks/4/