web-dev-qa-db-fra.com

L'astuce NOLOCK est-elle complètement sûre à utiliser sur une table qui est garantie de ne pas changer?

  1. Si j'ai une table où les données sont garanties de ne jamais changer, est-il totalement sûr d'ajouter l'indicateur NOLOCK à mes requêtes SELECT sur cette table?
  2. Si j'ai une table où certaines des lignes seront mises à jour, mais que je ne sélectionne que les lignes dont la garantie est de ne pas changer, est-ce également un scénario complètement sûr pour utiliser l'indicateur NOLOCK?
5
J.D.

Si j'ai une table où les données sont garanties de ne jamais changer, est-il totalement sûr d'ajouter l'indicateur NOLOCK à mes requêtes SELECT sur cette table?

En pratique, oui (bien que non documenté comme tel), mais aussi inutile. Si vos données ne changent jamais, l'utilisation de lectures incorrectes ne provoquera aucun comportement observable ni différence de performance matérielle.

Si j'ai une table où certaines des lignes seront mises à jour, mais que je ne sélectionne que les lignes dont la garantie est de ne pas changer, est-ce également un scénario complètement sûr pour utiliser l'indicateur NOLOCK?

Non, absolument pas. Le plan de requête pour lire les lignes cibles peut lire les structures de données changeantes sans contrôles de concurrence appropriés. Vous revenez donc à en espérant que vos requêtes ne renvoient pas de résultats bizarres, incorrects ou échouent tout simplement.