Update y bloqueos

02/11/2006 - 18:31 por xtian | Informe spam
Hola a todos, tengo una duda de conceptos, miren cuando hago un query
tan simple como este:
update tabla
set tab_cod = '0001'
where year(tab_fch) = 2002

Que es lo que sucede internamente, se hace un bloqueo completo de la
tabla? lo digo porque tengo una tabla parecida a esta y estoy seguro
que nadie manipula datos tan antiguos del año 2002, sin embargo cuando
corro el update bloqueo a muchos usuarios que supuestamente estan
operando con datos actuales de la tabla y eso no es lo que busco,
supuestamente deberia bloquear solo a aquellos que estan trabajando
data del año 2002, estoy en lo correcto? o hay algo que se me esta
pasando?

Gracias ...
 

Leer las respuestas

#1 Maxi
02/11/2006 - 19:03 | Informe spam
Hola, depende, SQL no bloquea por registros sino por paginas y hay ocaciones
donde si son muchas las paginas podria hacer un bloqueo general de la tabla
Ademas en este query estas teniendo un problema importante que es el uso de
funciones en el Where "where year(tab_fch) = 2002"
esto hara que si hay un indice para esa columna no sea usado de forma
eficiente con lo cual la query tardara mas y esto se traduce en mas tiempo
de bloqueo.
Yo te recomiendo que cambies primero esa instruccion en el where por algo
asi como

where tab_fch >= '20020101' and tab_fch <'20030101'




Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"xtian" escribió en el mensaje
news:
Hola a todos, tengo una duda de conceptos, miren cuando hago un query
tan simple como este:
update tabla
set tab_cod = '0001'
where year(tab_fch) = 2002

Que es lo que sucede internamente, se hace un bloqueo completo de la
tabla? lo digo porque tengo una tabla parecida a esta y estoy seguro
que nadie manipula datos tan antiguos del año 2002, sin embargo cuando
corro el update bloqueo a muchos usuarios que supuestamente estan
operando con datos actuales de la tabla y eso no es lo que busco,
supuestamente deberia bloquear solo a aquellos que estan trabajando
data del año 2002, estoy en lo correcto? o hay algo que se me esta
pasando?

Gracias ...

Preguntas similares