Comprendre les effets de with (updlock, rowlock) sur une requête dans SQL Server

J'utilise NHibernate pour interroger des données à partir d'une database de rapports et j'aimerais optimiser les performances de READ. "Les lectures sales" ne sont pas une préoccupation du tout. NHibernate fournit des modes de locking. Si j'utilise le mode LockMode.UpgradeNoWait, je peux voir que dans le SQL généré, un 'with (updlock, rowlock)' apparaît. J'ai lu à ce sujet, mais mon SQL n'est malheureusement pas assez sophistiqué pour vraiment comprendre les ramifications. Je crois que ce que je veux vraiment, c'est une déclaration 'with (nolock)', mais NHibernate ne voit aucun moyen de le faire.

Ma question est la suivante: Disons que mon tableau est écrit dans d'autres transactions. Est-ce que l'indice 'with (updlock, rowlock)' dans une requête sur cette table le rendra plus rapide? Cela peut-il nuire à la performance? La requête est un choix très simple par rapport à une seule table. Aucune jointure Il existe un index non cluster sur la table qui couvre la requête.

La mise à jour placera les verrous de mise à jour sur chaque ligne touchée (sélectionnée) – cela signifie que jusqu'à la fin de la transaction (explicite ou implicite), la ou les lignes touchées par le SELECT auront un verrou de mise à jour qui permettra d'autres transactions à lire, mais pas mettre à jour ou supprimer la ligne.

Le rowlock indique simplement que vous voulez des verrous au niveau des lignes au lieu des verrous de page ou de table.

Ce verrou a du sens si vous devez d'abord sélectionner, puis mettre à jour une ligne dans la même transaction explicite.

Il ne le fait pas fonctionner plus vite et peut bloquer d'autres transactions

Apparemment, je me suis trompé sur l'utilisation des modes de locking dans NHibernate. Ils n'ont rien à voir avec l'ajout de l'indicateur nolock à une requête. C'est la façon de le faire.