Использование с (nolock) для повышения производительности
-
28-10-2019 - |
Вопрос
Я видел, как разработчики используют с (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 очень мало из -за версии строк.