2010-10-04 9 views
11

Según entiendo, cuando NOLOCK se usa en la instrucción SELECT, también puede leer las filas no comprometidas/sucias. Pero quería aprovechar la sugerencia de NOLOCK en la tabla para que mi consulta SELECT se ejecute rápidamente.Declaración SELECT - NOLOCK con SET TRANSACTION AISLAMIENTO NIVEL LEÍDO COMPROMETIDO

Ahora, ¿NOLOCK en la tabla pero junto con "SET TRANSACTION ISOLATION LEVEL READ COMMITTED" me da la ventaja de NOLOCK y una consulta SELECT más rápida (debido a NOLOCK) con solo filas confirmadas (debido a SET)?

Respuesta

17

sí una sugerencia de tabla anula la configuración de nivel de aislamiento, por lo que aún se va a ensuciar lee

fácil de probar

primera carrera esta

create table bla(id int) 
insert bla values(1) 



begin tran 
select * from bla with (updlock, holdlock) 

asegurarse de no cometer el tran !! abrir otra ventana y ejecutar este

SET TRANSACTION ISOLATION LEVEL READ COMMITTED 

select * from bla -- with (nolock) 

usted no recibe nada a cambio.

abrir otra ventana y ejecutar este momento

SET TRANSACTION ISOLATION LEVEL READ COMMITTED 

select * from bla with (nolock) 

como se puede ver que se pondrá en la fila

Por cierto, LEA comprometida es el nivel de aislamiento predeterminado, sin necesidad de configurarlo

Eche un vistazo a Snapshot Isolation que no le devolverá los datos sucios, pero aún no se bloqueará

Cuestiones relacionadas