Использование с (nolock) для повышения производительности

StackOverflow https://stackoverflow.com/questions/5376222

Вопрос

Я видел, как разработчики используют с (nolock) в запросе, есть ли это недостаток? Кроме того, каков режим выполнения запроса по умолчанию? У моей базы данных нет индекса.

Есть ли другой способ повысить производительность оператора Database Select?

Это было полезно?

Решение

Распространенное заблуждение с NoLock заключается в том, что он не помещает блокировки в базу данных во время выполнения. Технически это вызывает устойчивость схемы (SCH-S), поэтому «нет» часть блокировки относится к стороне данных запроса.

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

Если у вас нет инструментальных доказательств и обоснованности при принятии грязного чтения (и потенциально читать одну и ту же строку дважды), то это не следует использовать - это определенно не должно быть подходом по умолчанию к запросам, но исключением из правила, когда его можно показать что это требуется.

Другие советы

В сети есть многочисленные статьи. Основным риском является то, что с NOLOCK Вы можете прочитать неприятные данные из таблицы (грязные чтения). Смотрите, например, http://msdn.microsoft.com/en-us/library/aa259216(v=sql.80).aspx или же http://www.techrepublic.com/article/using-nolock-and-readpast-table-hints-in-sql-server/6185492

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

У вас есть хранящаяся процедура для доступа к данным неактивных проектов. Вы не хотите, чтобы эта сохраненная процедура блокировала таблицу часто используемых проектов при чтении старых данных.

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

Список чтения стран, валют и т. Д. Из базы данных, чтобы показать в форме. Здесь данные остаются неизменными, и грязное чтение не вызовет большой проблемы, так как это произойдет очень редко.

Однако, начиная с SQL Server 2005, преимущества NoLock очень мало из -за версии строк.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top