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)?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top