Istruzione SELECT - NOLOCK con l'isolamento SET TRANSACTION LEVEL READ COMMITTED
-
27-09-2019 - |
Domanda
La mia comprensione è che quando NOLOCK viene utilizzato in SELECT, è in grado di leggere file commit / sporco. Ma ho voluto approfittare di NOLOCK suggerimento su tavolo in modo che la mia domanda SELECT correre veloce.
Ora, fa NOLOCK sul tavolo, ma insieme a "isolamento SET TRANSACTION LEVEL LEGGI impegnato" dammi vantaggio NOLOCK e veloce query SELECT (a causa della NOLOCK) con solo le righe commessi (a causa del SET)?
Soluzione
sì un hint di tabella sostituisce l'impostazione livello di isolamento, così ancora sporcarsi legge
facile da test
prima eseguire questo
create table bla(id int)
insert bla values(1)
begin tran
select * from bla with (updlock, holdlock)
fare attenzione a non commettere il tran !! aprire un'altra finestra ed eseguire questo
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
select * from bla -- with (nolock)
non si ottiene indietro nulla.
aprire un'altra finestra ed eseguire questo ora
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
select * from bla with (nolock)
come si può vedere si otterrà indietro la riga
A proposito, LEGGI impegnata è il livello di isolamento predefinito, non c'è bisogno di impostare
Date un'occhiata al Snapshot Isolation che non vi restituirà dati sporchi, ma ancora non si blocca