Je crois comprendre que lorsque NOLOCK est utilisé dans l'instruction SELECT, il peut également lire les lignes non validées/encrassées. Mais je voulais profiter de l'indice NOLOCK sur la table pour que ma requête SELECT puisse s'exécuter rapidement. Maintenant, est-ce que NOLOCK sur la table mais avec "SET TRANSACTION ISOLATION LEVEL READ COMMITTED" me donne un avantage NOLOCK et une requête SELECT plus rapide (à cause de NOLOCK) avec seulement des lignes validées (à cause de SET)?Instruction SELECT - NOLOCK avec SET TRANSACTION ISOLATION LEVEL READ COMMITTED
11
A
Répondre
17
oui un soupçon de table remplace le paramètre de niveau d'isolation, de sorte que vous obtiendrez toujours sale lit
facile à tester
première manche ce
create table bla(id int)
insert bla values(1)
begin tran
select * from bla with (updlock, holdlock)
assurez-vous commettez pas la tran !! ouvrir une autre fenêtre et exécutez ce
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
select * from bla -- with (nolock)
vous ne recevez rien en retour.
ouvrir une autre fenêtre et exécuter ce maintenant
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
select * from bla with (nolock)
que vous pouvez voir vous récupérerez la ligne
BTW, READ COMMITTED est le niveau d'isolation par défaut, pas besoin de le mettre
Jetez un oeil à Snapshot Isolation qui ne vous rendra pas les données sales mais ne verrouillera toujours pas