Question

J'ai vu les développeurs utilisant WITH (NOLOCK) dans la requête, est-il un désavantage de celui-ci? De plus, quel est le mode par défaut d'exécution de la requête? Ma base de données n'ont pas d'index.

Y at-il un autre moyen de la base de données de performance sélectionnez augmentation déclaration?

Était-ce utile?

La solution

L'idée fausse commune avec nolock est que qu'il en pose pas sur la base de données tout en exécutant. Techniquement, il ne délivre un schéma-stabilité de verrouillage (sch-s), de sorte que le « non » partie de la serrure se rapporte à la partie de données de la requête.

La plupart du temps que je vois cela, il est une optimisation prématurée par un développeur parce qu'ils ont entendu cela fait plus rapidement la requête.

Sauf si vous avez instrumenté la preuve et la validité en acceptant une lecture sale (et potentiellement lire la même ligne deux fois), alors il ne devrait pas être utilisé - il ne devrait certainement pas être l'approche par défaut pour les requêtes, mais une exception à la règle lorsqu'elle peut être démontré qu'il est nécessaire.

Autres conseils

Il existe de nombreux articles sur ce sur le net. Le principal risque est que, avec NOLOCK vous pouvez lire les données uncomitted de la table (sale lit). Voir, par exemple, http://msdn.microsoft .com / fr-fr / bibliothèque / aa259216 (v = sql.80) .aspx ou http://www.techrepublic.com/article/using-nolock-and-readpast-table-hints-in-sql-server/6185492

NOLOCK can be highly useful when you are reading old data from a frequently used table. Consider the following example,

You have a stored procedure to access data of inactive projects. You don't want this stored procedure to lock the frequently used Projects table while reading old data.

NOLOCK is also useful when dirty reads are not a problem and data is not frequently modified such as in the following cases,

Reading list of countries, currencies, etc... from a database to show in the form. Here the data remains unchanged and a dirty read will not cause a big problem as it will occur very rarely.

However starting with SQL server 2005 the benefits of NOLOCK is very little due to row versioning.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top