Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Effet de l'indicateur NOLOCK dans les instructions SELECT

1) Oui , une sélection avec NOLOCK se terminera plus rapidement qu'une sélection normale.

2) Oui , une sélection avec NOLOCK permettra à d'autres requêtes sur la table affectée de se terminer plus rapidement qu'une sélection normale.

Pourquoi serait-ce le cas ?

NOLOCK généralement (selon votre moteur de base de données) signifie donnez-moi vos données, et je me fiche de l'état dans lequel elles se trouvent, et ne vous embêtez pas à les maintenir immobiles pendant que vous les lisez. C'est tout à la fois plus rapide, moins gourmand en ressources et très très dangereux.

Vous devez être averti de ne jamais effectuer de mise à jour ou d'effectuer quoi que ce soit de critique du système, ou lorsqu'une exactitude absolue est requise en utilisant des données provenant d'un NOLOCK lis. Il est tout à fait possible que ces données contiennent des lignes qui ont été supprimées lors de l'exécution de la requête ou qui ont été supprimées dans d'autres sessions qui doivent encore être finalisées. Il est possible que ces données incluent des lignes qui ont été partiellement mises à jour. Il est possible que ces données contiennent des enregistrements qui violent les contraintes de clé étrangère. Il est possible que ces données excluent des lignes qui ont été ajoutées à la table mais qui n'ont pas encore été validées.

Vous n'avez vraiment aucun moyen de savoir quel est l'état des données.

Si vous essayez d'obtenir des éléments comme un nombre de lignes ou d'autres données récapitulatives où une certaine marge d'erreur est acceptable, alors NOLOCK est un bon moyen d'améliorer les performances de ces requêtes et d'éviter qu'elles n'aient un impact négatif sur les performances de la base de données.

Utilisez toujours le NOLOCK indiquez avec beaucoup de prudence et traitez toutes les données renvoyées de manière suspecte.